|
36133
|
1349
|
9
|
2026-05-13T13:43:09.309139+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679789309_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp>0 lыlec2-user@ip-10-30-129-190:~883-zshSprint Review - in 27 mA100% C8• Wed 13 May 15:33:40181DOCKERC *1DEV (docker)Last login: Wed May 13 09:16:21 on ttys010982APP (-zsh)84screenpipe"• ₴5Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ssh jiminny-prod-ecs1 -L 7970:vpc-activities7g-t6nxe5qk7zis7pa5i7qlmp3zwm.us-east-2.es.amazonaws.com:80Enter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:Warning: Permanently added 'jiminny-prod-ecs1' (ED25519) to the list of known hosts.A newer release of "Amazon Linux" is available.Version 2023.10.20260330:Version 2023.11.20260406:Version 2023.11.20260413:Version 2023.11.20260427:Version 2023.11.20260505:Version 2023.11.20260509:Run "/usr/bin/dnf check-release-update" for full release and version update info#_####_\_#####\\###|\#/v~'Amazon Linux 2023 (ECS Optimized)ec2-user@ip-10-30-129-190:~ (. 26Im/*Fordocumentation,visit [URL_WITH_CREDENTIALS] ~]$ ||...
|
NULL
|
5725358035782193467
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp>0 lыlec2-user@ip-10-30-129-190:~883-zshSprint Review - in 27 mA100% C8• Wed 13 May 15:33:40181DOCKERC *1DEV (docker)Last login: Wed May 13 09:16:21 on ttys010982APP (-zsh)84screenpipe"• ₴5Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ssh jiminny-prod-ecs1 -L 7970:vpc-activities7g-t6nxe5qk7zis7pa5i7qlmp3zwm.us-east-2.es.amazonaws.com:80Enter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:Warning: Permanently added 'jiminny-prod-ecs1' (ED25519) to the list of known hosts.A newer release of "Amazon Linux" is available.Version 2023.10.20260330:Version 2023.11.20260406:Version 2023.11.20260413:Version 2023.11.20260427:Version 2023.11.20260505:Version 2023.11.20260509:Run "/usr/bin/dnf check-release-update" for full release and version update info#_####_\_#####\\###|\#/v~'Amazon Linux 2023 (ECS Optimized)ec2-user@ip-10-30-129-190:~ (. 26Im/*Fordocumentation,visit [URL_WITH_CREDENTIALS] ~]$ ||...
|
36131
|
NULL
|
NULL
|
NULL
|
|
36169
|
NULL
|
0
|
2026-05-13T13:45:50.416291+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679950416_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}...
|
[{"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-20891-improve-sms-text-relays, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7267224809832250378
|
-3671441499405218046
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}...
|
36167
|
NULL
|
NULL
|
NULL
|
|
36170
|
1351
|
0
|
2026-05-13T13:46:05.575957+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679965575_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
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-20891-improve-sms-text-relays, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}","depth":4,"on_screen":true,"value":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1396797723161680241
|
-3655432845370750114
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
36171
|
1352
|
0
|
2026-05-13T13:46:05.586195+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679965586_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
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-20891-improve-sms-text-relays, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.08843085,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","depth":4,"bounds":{"left":0.16722074,"top":0.1963288,"width":0.24069148,"height":0.782921},"on_screen":true,"lines":[{"char_start":0,"char_count":6,"bounds":{"left":0.16722074,"top":0.0,"width":0.012965426,"height":0.014365523}},{"char_start":7,"char_count":47,"bounds":{"left":0.16722074,"top":0.0,"width":0.119015954,"height":0.014365523}},{"char_start":55,"char_count":32,"bounds":{"left":0.16722074,"top":0.0,"width":0.010305851,"height":0.014365523}},{"char_start":87,"char_count":44,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":131,"char_count":52,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":183,"char_count":43,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":226,"char_count":29,"bounds":{"left":0.1775266,"top":0.0,"width":0.0076462766,"height":0.014365523}},{"char_start":256,"char_count":65,"bounds":{"left":0.16722074,"top":0.019952115,"width":0.16589096,"height":0.014365523}},{"char_start":321,"char_count":2,"bounds":{"left":0.16722074,"top":0.037509978,"width":0.0026595744,"height":0.014365523}},{"char_start":323,"char_count":62,"bounds":{"left":0.16722074,"top":0.055067837,"width":0.15791224,"height":0.014365523}},{"char_start":385,"char_count":65,"bounds":{"left":0.16722074,"top":0.0726257,"width":0.16589096,"height":0.014365523}},{"char_start":451,"char_count":78,"bounds":{"left":0.16722074,"top":0.10774142,"width":0.19946809,"height":0.014365523}},{"char_start":529,"char_count":6,"bounds":{"left":0.16722074,"top":0.12529927,"width":0.012965426,"height":0.014365523}}],"value":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15","depth":4,"bounds":{"left":0.7124335,"top":0.10055866,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.7237367,"top":0.09896249,"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.73105055,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}","depth":4,"bounds":{"left":0.42719415,"top":0.09736632,"width":0.5728059,"height":0.8818835},"on_screen":true,"value":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1396797723161680241
|
-3655432845370750114
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
15
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
36174
|
1351
|
2
|
2026-05-13T13:46:39.012809+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679999012_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20891-improve-sms-text-relays, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1362947798257697316
|
-2575675244731720149
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp>0 lыlec2-user@ip-10-30-129-190:~883-zshSprint Review - in 27 mA100% C8• Wed 13 May 15:33:40181DOCKERC *1DEV (docker)Last login: Wed May 13 09:16:21 on ttys010982APP (-zsh)84screenpipe"• ₴5Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ssh jiminny-prod-ecs1 -L 7970:vpc-activities7g-t6nxe5qk7zis7pa5i7qlmp3zwm.us-east-2.es.amazonaws.com:80Enter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:Warning: Permanently added 'jiminny-prod-ecs1' (ED25519) to the list of known hosts.A newer release of "Amazon Linux" is available.Version 2023.10.20260330:Version 2023.11.20260406:Version 2023.11.20260413:Version 2023.11.20260427:Version 2023.11.20260505:Version 2023.11.20260509:Run "/usr/bin/dnf check-release-update" for full release and version update info#_####_\_#####\\###|\#/v~'Amazon Linux 2023 (ECS Optimized)ec2-user@ip-10-30-129-190:~ (. 26Im/*Fordocumentation,visit [URL_WITH_CREDENTIALS] ~]$ ||...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
36175
|
1352
|
2
|
2026-05-13T13:46:39.035892+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778679999035_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification...
|
[{"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-20891-improve-sms-text-relays, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.08843085,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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}]...
|
5863150365379965084
|
-7195547094622295102
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
PhostormVIewINavigareCodeKeractorFV faVsco.js°9 JY-20891-improve-sms-text-relaysProledey© MailboxController.phpM MakefileJ package-lock.json= phpstan.neon.dist= phpstan-baseline.neon<> phpunit.xmlTaraw_sqL_query.sqMLPEADME mdC) TextRelayService.onp© Sso.phpossocontroller.ong© TextMessa©smsmessage.ong© SmsLength.php© TextRelay.phpService/Search.php x © ActivityStatusin.phpclass SearchM A10 A V< sonar-project.propertiesE test.py‹› Untitea Diagram.Xmiis vetur.config.jsM+ WEBHOOK_FILTERING_IMPLEM› ih External Librariesv E° Scratches and Consolesv C Database ConsolesV AEU& console EUl& DEALRISKS EUIA DI (EU)AEUEUvdiminnv@localhostA console fiminnv@localho# DI lliminnv@localhost4 HS local fiminnv@localhd4 SF [jiminny@localhost]Azoho dev fiminnvalocall• DROn# concole [ROnll# concole 1 [pponlA DI (PRODI› AQAЛAAI› A QAI PRODA STAGINGA console [STAGINGIA console 1 [STAGING]& uranus STAGING> C Extensionsv @ ScratchesEphostorm_shortcuts.txt=° scratch.txt{° scratch_1.ison{° scratch 2 ison<° scratch 3lison125= scratch 4 txtphe scratch 5.ohnphe scratch 6.ohnSscratch 7isonscratch R.isonstaae? ison= toctselt s...iprivate function createSearch(Query $query, Searchable|string $modelOrindex): Elastica \Searchif (request() && request()->has('debug')) {"dehua' => requesto->aet('dehua')'userUuid' => request(->user?->getIdString) ?? 'anonymous','query' => ison_encode(Squery->toArrayOflaas: LISON THROW ON ERROR).'url' => request->fullUrlO,1):— 96recurn schis->cllent-›createIndex( indexName: $model0rIndex instanceof Searchable ? Smodel0rIndex->getIndex() : $model0r 94->createsearch squery)96public function scroll(Query Squery. Searchable|string Smodel): Elastica\Scroll{...}98100* dparam searchablestrino smodelurindex usaoe of model 1s deprecated102* dreturn Lazucollection<int. Document>public function scrolloverDocuments(query Squery, SearchabLe|string SmodeLOrIndex): LazyCollection(...* I105Lix** Aoaran Searchable|strina Snodel0rIndey usage of model is denrecatedT109public function search(Query $query, Searchablelstring $modelOrIndex, ?string $queryName = null): Elastica 11€Datadog::increment( stats: 'jiminny.es.search', sampleRate: 1, ['query' => $queryName ?? "']);—112$before = microtime( as_float: true);Sresult = $this->createSearch($query, Smodel0rIndex)->search0:117Cofton = micnotimed as tloat: true)"Datadog:: timing( stat: "jiminny.es.search.time', (int) (($after - $before) * 1000)sampleRate: 1, ['quer: 120return sresult.• sonnt Keview • In 21m100% L2• Wed 13 May 15:33:40AskJiminnyReportActivityServiceTest v= custom.logscratch. &.ison= laravel.logA SF jiminny@localhost]« HS_local [jiminny@localhost] X console [PROD]cascadeA console (EU]A console [STACINClrial Owner Role SeleRetactoring User EmaDashboard Activity De+0 ..~/Library/Application Support/JetBrains/PhpStorm2026.1/consoles/db/5b1549d5-9876-4d9e-9ce3-025f12a83283/console.sait is there lust didn't include it "tracks"D69.select * from opportunities where team id = 2 and erm providen id TN (1374720564° 1145274235891 1490086191 X565571wsELEcT * FruM opportunity contacts whERE opportunity 1d = '414'*SELECT * FROM opportunity_contacts WHERE crm_provider_id = '131501';select * rrom contacts where 1d in (414. 464)1select * from activities where crm confiquration 1d = 2select settinas from crm conficurations where 1d = 11:Perfect - the activity has both video and audio tracks, so it would pass the ActivityRecorded filter even if appliedselect * From teams: # 1. 2select * from users;select * from crm_configurations where id = 39;select * from team_features where team_id = 2›select * from features;# SELECT * FROM opportunities WHERE crm_configuration_id = 2order by id desc;# and crm_provider_id = '49908861993';|Confirmed Fields (All Pass V)•• status : "failed" - Included in default status filtertype: "conference" - Allowed activity typeVis private : false - Passes privacy filter• V is internal: false - Should be visible• V actual_start_time : "2026-05-12 13:14:08" - Required field existsvtracks: Has video + audio tracks - Passes recorded tilterNext Stens to Deouaselect * from activity providers where id IN (443, 202, 203, 227):Since all fields nass the filters. check these:1. Date Range Selected in Dashboardselect * from activity imports where id = 795889:What date range is the user viewing? The detault is last 90 days. May 12, 2026 should be within range, but verity theselect c.id, c.provider, c.settings, t.* from teams t join crm confiqurations c 1<->1.n: on t.id = c.team_idactual Start date and end date parameters in te dasnooaro recuestwhere c.provider = 'hubspot'2. User/Team ScopeIs user 29089 (Line Kristensen) viewina her own dashboard? Verifv.select * from crm confiqurations crm JOIN teams + 1..n<->1: on crm.team id = t.id• User belonas to team 575 (NationBuilder) 7• User's group (Sales Team) has team_id: 575 VSELE * FROM teamsWHERE 1d = 311SELECT * FROM users WHERE id = 257;opportunities WHERE team 1d = 2• Check it RestrictTeam or RestrictUserGroupScope filters are excluding this3. Sxolicit Filter ValuesCheck if the dashboard request is passing explicit filter values that might exclude this activity, particularly:select * from opportunity_contacts where opportunity_id = 5124;select * fron contacts where id TN (3850.3853. 3851. 4073.4140.4155.4480.4530.4623. 5986. 513. 687. 1806. 1523. 3613) |activity status_values - might be set to only "completed"•only recorded activities - miaht be exolicitly set despite the override4. Actual Elasticsearch Quervselect * from activities where eom confiaunation id = 13.SELECT * FROM activities WHERE uuid_to_bin('826619ce-ec8e-4e59-8467-a01f5f6ad71e') = uuid; # 418141|Add logging in TeamInsightsRepository::getDashboardActivity0verTime to capture the exact Elasticsearch querybeina executed and see why this activitv is excluded!Most likely cause: Either the date range filter is excluding it, or an explicit filter value is being passed that overrides thedefault behavionselect id, team id, crm provider id from crm confiqurations where provider = 'hubspot' and crm provider id IS NOT NULSELECT * FROM accounts WHERE team id = 2 and crm provider id = '1212213464' order by id desc:SSISCT + SP0M contactc WHGPEteam id = 2 and account id = 5189 order by id desc:SELECT * FROM contacts WHERE team id = 2 order by id desc:select * from opportunity contacts where contact id = 6223:SELECT * FROM opportunities WHERE team id = 2 and account id = 5189 order by id desr.al .Ask anvthina (84L)"Code SWF-1.6•0 1.select * from erm profiles where crm confiquration id = 2:WN Windsurf Teams121-1UTF.A...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
36176
|
1351
|
3
|
2026-05-13T13:46:46.602424+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778680006602_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
120
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"13:41","to":"13:46"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"03:36","to":"03:41"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-13T13:48:16.497719Z"} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813006,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813007,"provider":"xant","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813008,"provider":"apollo","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813009,"provider":"groove","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813010,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813011,"provider":"hubspot","team":"hubspot"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"[HTTP 401] Unable to fetch page: Authenticate","file":"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php","line":60} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"memory_usage":26222008,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"memory_usage":26543728,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {"query":"
SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400]
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {"url":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000","data":{"headers":{"Authorization":"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU"}},"response":{"GuzzleHttp\\Psr7\\Stream":"[{\"message\":\"\\nSELECT call_recording_url__c,TaskSubtype\\n ^\\nERROR at Row:1:Column:8\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"errorCode\":\"INVALID_FIELD\"}]"},"fields":[]} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","file":"/home/jiminny/app/Services/Crm/Salesforce/Client.php","line":564} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {"query":"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c
FROM Task
WHERE Type = 'Video'
AND isClosed = true
AND IsDeleted = false
AND LastModifiedDate >= :from
AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"memory_usage":26794472,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-13 13:29:00","to":"2026-05-13 13:45:00"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":27195904,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
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-20891-improve-sms-text-relays, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"13:41\",\"to\":\"13:46\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"03:36\",\"to\":\"03:41\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-13T13:48:16.497719Z\"} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813006,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813007,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813008,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813009,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813010,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813011,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26222008,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26543728,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26794472,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-13 13:29:00\",\"to\":\"2026-05-13 13:45:00\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27195904,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}","depth":4,"on_screen":true,"value":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"13:41\",\"to\":\"13:46\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"03:36\",\"to\":\"03:41\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-13T13:48:16.497719Z\"} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813006,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813007,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813008,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813009,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813010,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813011,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26222008,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26543728,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26794472,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-13 13:29:00\",\"to\":\"2026-05-13 13:45:00\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27195904,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}","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}]...
|
-7592372071078752643
|
-2997871983503491923
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
120
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"13:41","to":"13:46"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"03:36","to":"03:41"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-13T13:48:16.497719Z"} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813006,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813007,"provider":"xant","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813008,"provider":"apollo","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813009,"provider":"groove","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813010,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813011,"provider":"hubspot","team":"hubspot"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"[HTTP 401] Unable to fetch page: Authenticate","file":"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php","line":60} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"memory_usage":26222008,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"memory_usage":26543728,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {"query":"
SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400]
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {"url":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000","data":{"headers":{"Authorization":"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU"}},"response":{"GuzzleHttp\\Psr7\\Stream":"[{\"message\":\"\\nSELECT call_recording_url__c,TaskSubtype\\n ^\\nERROR at Row:1:Column:8\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"errorCode\":\"INVALID_FIELD\"}]"},"fields":[]} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","file":"/home/jiminny/app/Services/Crm/Salesforce/Client.php","line":564} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {"query":"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c
FROM Task
WHERE Type = 'Video'
AND isClosed = true
AND IsDeleted = false
AND LastModifiedDate >= :from
AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"memory_usage":26794472,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-13 13:29:00","to":"2026-05-13 13:45:00"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":27195904,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
36174
|
NULL
|
NULL
|
NULL
|
|
36177
|
1352
|
3
|
2026-05-13T13:46:46.597154+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-13/1778 /Users/lukas/.screenpipe/data/data/2026-05-13/1778680006597_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
120
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"13:41","to":"13:46"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"03:36","to":"03:41"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-13T13:48:16.497719Z"} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813006,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813007,"provider":"xant","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813008,"provider":"apollo","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813009,"provider":"groove","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813010,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813011,"provider":"hubspot","team":"hubspot"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"[HTTP 401] Unable to fetch page: Authenticate","file":"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php","line":60} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"memory_usage":26222008,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"memory_usage":26543728,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {"query":"
SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400]
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {"url":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000","data":{"headers":{"Authorization":"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU"}},"response":{"GuzzleHttp\\Psr7\\Stream":"[{\"message\":\"\\nSELECT call_recording_url__c,TaskSubtype\\n ^\\nERROR at Row:1:Column:8\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"errorCode\":\"INVALID_FIELD\"}]"},"fields":[]} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","file":"/home/jiminny/app/Services/Crm/Salesforce/Client.php","line":564} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {"query":"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c
FROM Task
WHERE Type = 'Video'
AND isClosed = true
AND IsDeleted = false
AND LastModifiedDate >= :from
AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"memory_usage":26794472,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-13 13:29:00","to":"2026-05-13 13:45:00"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":27195904,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
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-20891-improve-sms-text-relays, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.08843085,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20891-improve-sms-text-relays","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"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":"AXTextArea","text":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","depth":4,"bounds":{"left":0.16722074,"top":0.1963288,"width":0.24069148,"height":0.782921},"on_screen":true,"lines":[{"char_start":0,"char_count":6,"bounds":{"left":0.16722074,"top":0.0,"width":0.012965426,"height":0.014365523}},{"char_start":7,"char_count":47,"bounds":{"left":0.16722074,"top":0.0,"width":0.119015954,"height":0.014365523}},{"char_start":55,"char_count":32,"bounds":{"left":0.16722074,"top":0.0,"width":0.010305851,"height":0.014365523}},{"char_start":87,"char_count":44,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":131,"char_count":52,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":183,"char_count":43,"bounds":{"left":0.1775266,"top":0.0,"width":0.0026595744,"height":0.014365523}},{"char_start":226,"char_count":29,"bounds":{"left":0.1775266,"top":0.0,"width":0.0076462766,"height":0.014365523}},{"char_start":256,"char_count":65,"bounds":{"left":0.16722074,"top":0.019952115,"width":0.16589096,"height":0.014365523}},{"char_start":321,"char_count":2,"bounds":{"left":0.16722074,"top":0.037509978,"width":0.0026595744,"height":0.014365523}},{"char_start":323,"char_count":62,"bounds":{"left":0.16722074,"top":0.055067837,"width":0.15791224,"height":0.014365523}},{"char_start":385,"char_count":65,"bounds":{"left":0.16722074,"top":0.0726257,"width":0.16589096,"height":0.014365523}},{"char_start":451,"char_count":78,"bounds":{"left":0.16722074,"top":0.10774142,"width":0.19946809,"height":0.014365523}},{"char_start":529,"char_count":6,"bounds":{"left":0.16722074,"top":0.12529927,"width":0.012965426,"height":0.014365523}}],"value":"<?php\n\nnamespace Jiminny\\Console\\Commands\\Activities;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Jiminny\\Contracts\\ES\\Events\\UpdateSingleEntity;\nuse Jiminny\\Contracts\\ES\\UpdateTargetEnum;\nuse Jiminny\\Models\\Activity;\n\nclass UpdateActivityElasticSearchDocumentCommand extends Command\n{\n protected $signature = 'activity:update:es {activityId}';\n protected $description = 'Update ES document synchronously';\n\n public function __construct(private readonly Dispatcher $eventDispatcher)\n {\n parent::__construct();\n }\n\n public function handle(): void\n {\n $activityId = $this->argument('activityId');\n /** @var Activity $activity */\n $activity = Activity::idOrUuId($activityId)->first();\n $this->info('Sending activity for ES update...');\n\n $this->eventDispatcher->dispatch(\n new UpdateSingleEntity(\n entityId: $activity->getId(),\n updateTarget: UpdateTargetEnum::ACTIVITY,\n purpose: 'cli-command-activity-update-es',\n isSyncEvent: true,\n )\n );\n\n $this->info('Done.');\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.7101064,"top":0.10055866,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.7237367,"top":0.09896249,"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.73105055,"top":0.09896249,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"13:41\",\"to\":\"13:46\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"03:36\",\"to\":\"03:41\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-13T13:48:16.497719Z\"} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813006,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813007,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813008,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813009,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813010,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813011,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26222008,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26543728,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26794472,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-13 13:29:00\",\"to\":\"2026-05-13 13:45:00\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27195904,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}","depth":4,"on_screen":true,"value":"[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"774b2e08-d1a7-42aa-bdcd-dfbab9a97461\",\"trace_id\":\"06ba6231-be00-419a-82ed-e5046c92f0bf\"}\n[2026-05-13 13:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {\"class\":\"Jiminny\\\\Component\\\\LiveFeed\\\\Aggregator\\\\DatabaseAggregatorService\",\"enabledTypes\":[\"scorecard\",\"activity_play\",\"activity_shared\",\"nudge_generated\"],\"builders\":[\"activity_play\",\"activity_shared\"]} {\"correlation_id\":\"96596b30-c6c1-41b3-a616-66312eb30c9d\",\"trace_id\":\"5d050cee-224c-47b5-9b87-3e289ab4a15f\"}\n[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:42] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"ad812f81-cc99-4399-b765-dabd58cac955\",\"trace_id\":\"d282ff36-0d71-4fce-ae45-652370310fd9\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1\",\"trace_id\":\"f4fc75c6-53b7-496a-a031-c976deda27d5\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:45:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"cb8bd55d-bc61-40fd-b877-61843870a5a8\",\"trace_id\":\"5cfea7c5-6266-446f-8a16-af5957307dcc\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:00] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"34dfffd8-f496-4dac-8ed9-0032e26b0347\",\"trace_id\":\"9f188bd4-2df6-4be8-a6bd-346606f9a0ac\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"a206451f-0330-485c-8447-1001da88afe4\",\"trace_id\":\"f290d75f-623f-4844-adc4-a6263db2552e\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"13:41\",\"to\":\"13:46\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"03:36\",\"to\":\"03:41\"} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"11523658-a519-4efb-9374-544ccaf74b04\",\"trace_id\":\"67ee0786-91f3-43bb-b3ee-fa7a547232e8\"}\n[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] 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\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"0234171f-6fe4-475d-86e3-93c05a995717\",\"trace_id\":\"5641e83d-6bf8-4a09-a677-fb1c403efd47\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-13T13:48:16.497719Z\"} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"578404b8-e462-436b-aa62-0dcc80181a11\",\"trace_id\":\"838c4bf0-1cac-4431-b2a1-5407515d5bcb\"}\n[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813006,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813007,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813008,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813009,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813010,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {\"import_id\":813011,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"2646ff36-a458-4b37-b963-b21754f60936\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {\"import_id\":813006,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"a23edaa7-db0d-464b-9651-93c47383a810\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813007,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26222008,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"5a498053-7110-4fed-8507-6a135afea90a\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {\"import_id\":813008,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26543728,\"memory_real_usage\":65011712,\"pid\":17492} {\"correlation_id\":\"13ee372e-15fe-490e-8329-467147b79374\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {\"import_id\":813009,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"d02293d0-1fa9-489e-bea2-c34b5969d812\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-05-13T13:29:00Z\",\"to\":\"2026-05-13T13:45:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {\"import_id\":813010,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":26794472,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"0c7a86b3-e7da-4f27-b3be-79b539df598c\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-13 13:29:00\",\"to\":\"2026-05-13 13:45:00\"} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"01931d13-26df-400e-ab47-2a17652ed467\",\"trace_id\":\"17e2deea-6acd-45b9-b0fb-988cc0524abf\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {\"import_id\":813011,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27195904,\"memory_real_usage\":67108864,\"pid\":17492} {\"correlation_id\":\"238a2744-a4ad-4d69-895e-8ef072d714d1\",\"trace_id\":\"6f36a5e4-9c4a-4f29-b96b-df5256077a37\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"95287933-34d7-41fe-a30b-b92cbab27a30\",\"trace_id\":\"aba33402-30c1-4969-af8b-4aa2e8749028\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"c5c5240c-48e6-4950-8848-c6a623c8aefb\",\"trace_id\":\"214bcd81-6d34-4729-97b5-d03b2548b4f7\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}\n[2026-05-13 13:46:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.73,\"memoryPeakAfterCommandInMB\":99.73} {\"correlation_id\":\"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97\",\"trace_id\":\"225ae23e-1163-4b15-8fbd-6ab84afe4db9\"}","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}]...
|
-7592372071078752643
|
-2997871983503491923
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20891-improve-sms-text Project: faVsco.js, menu
JY-20891-improve-sms-text-relays, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
<?php
namespace Jiminny\Console\Commands\Activities;
use Illuminate\Console\Command;
use Illuminate\Contracts\Events\Dispatcher;
use Jiminny\Contracts\ES\Events\UpdateSingleEntity;
use Jiminny\Contracts\ES\UpdateTargetEnum;
use Jiminny\Models\Activity;
class UpdateActivityElasticSearchDocumentCommand extends Command
{
protected $signature = 'activity:update:es {activityId}';
protected $description = 'Update ES document synchronously';
public function __construct(private readonly Dispatcher $eventDispatcher)
{
parent::__construct();
}
public function handle(): void
{
$activityId = $this->argument('activityId');
/** @var Activity $activity */
$activity = Activity::idOrUuId($activityId)->first();
$this->info('Sending activity for ES update...');
$this->eventDispatcher->dispatch(
new UpdateSingleEntity(
entityId: $activity->getId(),
updateTarget: UpdateTargetEnum::ACTIVITY,
purpose: 'cli-command-activity-update-es',
isSyncEvent: true,
)
);
$this->info('Done.');
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
120
Previous Highlighted Error
Next Highlighted Error
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"774b2e08-d1a7-42aa-bdcd-dfbab9a97461","trace_id":"06ba6231-be00-419a-82ed-e5046c92f0bf"}
[2026-05-13 13:45:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.WARNING: Dropping builders that are not explicitly enabled. Affected item types are: coaching_feedback {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.WARNING: There are no registered builders for some of the explicitly enabled item types. Affected item types are: scorecardnudge_generated {"class":"Jiminny\\Component\\LiveFeed\\Aggregator\\DatabaseAggregatorService","enabledTypes":["scorecard","activity_play","activity_shared","nudge_generated"],"builders":["activity_play","activity_shared"]} {"correlation_id":"96596b30-c6c1-41b3-a616-66312eb30c9d","trace_id":"5d050cee-224c-47b5-9b87-3e289ab4a15f"}
[2026-05-13 13:45:42] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:42] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"ad812f81-cc99-4399-b765-dabd58cac955","trace_id":"d282ff36-0d71-4fce-ae45-652370310fd9"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"0eb6b36c-b677-44dc-a6ff-47ea3d4bc5f1","trace_id":"f4fc75c6-53b7-496a-a031-c976deda27d5"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:45:57] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"cb8bd55d-bc61-40fd-b877-61843870a5a8","trace_id":"5cfea7c5-6266-446f-8a16-af5957307dcc"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Running pre-meeting notification command {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:00] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"34dfffd8-f496-4dac-8ed9-0032e26b0347","trace_id":"9f188bd4-2df6-4be8-a6bd-346606f9a0ac"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Running conference:monitor:start command for activities in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: [conference:monitor:start] No activities found in (2026-05-13 13:36:00, 2026-05-13 13:41:00] {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"a206451f-0330-485c-8447-1001da88afe4","trace_id":"f290d75f-623f-4844-adc4-a6263db2552e"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"13:41","to":"13:46"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"03:36","to":"03:41"} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"11523658-a519-4efb-9374-544ccaf74b04","trace_id":"67ee0786-91f3-43bb-b3ee-fa7a547232e8"}
[2026-05-13 13:46:09] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:10] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] 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":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:11] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"0234171f-6fe4-475d-86e3-93c05a995717","trace_id":"5641e83d-6bf8-4a09-a677-fb1c403efd47"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-13T13:48:16.497719Z"} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"578404b8-e462-436b-aa62-0dcc80181a11","trace_id":"838c4bf0-1cac-4431-b2a1-5407515d5bcb"}
[2026-05-13 13:46:16] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813006,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813007,"provider":"xant","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813008,"provider":"apollo","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813009,"provider":"groove","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813010,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Dispatching activity sync job {"import_id":813011,"provider":"hubspot","team":"hubspot"} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"2646ff36-a458-4b37-b963-b21754f60936","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:22] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1194,"provider":"twilio-flex"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.INFO: [SyncActivity] Start {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.NOTICE: [TwilioFlex] Calls import start {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:22] local.ALERT: [SyncActivity] Failed {"import_id":813006,"provider":"twilio-flex","provider_id":317,"team":"jiminny","team_id":1,"reason":"[HTTP 401] Unable to fetch page: Authenticate","file":"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php","line":60} {"correlation_id":"a23edaa7-db0d-464b-9651-93c47383a810","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Xant (InsideSales)] No calls found. {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813007,"provider":"xant","provider_id":161,"team":"jiminny","team_id":1,"memory_usage":26222008,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"5a498053-7110-4fed-8507-6a135afea90a","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Start {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Performing query {"query":"
SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [Apollo] No calls found. {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] End {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:23] local.INFO: [SyncActivity] Memory usage {"import_id":813008,"provider":"apollo","provider_id":441,"team":"jiminny","team_id":1,"memory_usage":26543728,"memory_real_usage":65011712,"pid":17492} {"correlation_id":"13ee372e-15fe-490e-8329-467147b79374","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [SyncActivity] Start {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Performing query {"query":"
SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type
FROM Task
WHERE IsDeleted = false
AND LastModifiedDate >= :from
AND LastModifiedDate <= :to
ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:24] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ERROR: [Salesforce] Request exception [400]
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {"url":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000","data":{"headers":{"Authorization":"Bearer 00D2g0000008hH4!AQEAQNCMAoL3Aga0Py8XHOJMKgnYELHnah_QDC_0ZRJFQR6rwUXzOwv1ktSKIq1P50DlrknGexxcwMDHW3R1_vZaAge7i6gU"}},"response":{"GuzzleHttp\\Psr7\\Stream":"[{\"message\":\"\\nSELECT call_recording_url__c,TaskSubtype\\n ^\\nERROR at Row:1:Column:8\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"errorCode\":\"INVALID_FIELD\"}]"},"fields":[]} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.ALERT: [SyncActivity] Failed {"import_id":813009,"provider":"groove","provider_id":228,"team":"jiminny","team_id":1,"reason":"
SELECT call_recording_url__c,TaskSubtype
^
ERROR at Row:1:Column:8
No such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.","file":"/home/jiminny/app/Services/Crm/Salesforce/Client.php","line":564} {"correlation_id":"d02293d0-1fa9-489e-bea2-c34b5969d812","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"salesforce","crm_owner":143,"team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1500,"provider":"salesforce"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Performing query {"query":"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c
FROM Task
WHERE Type = 'Video'
AND isClosed = true
AND IsDeleted = false
AND LastModifiedDate >= :from
AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC
LIMIT :limit","params":{"from":"2026-05-13T13:29:00Z","to":"2026-05-13T13:45:00Z","ownerId":null,"subType":null,"limit":5000}} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Salesforce] Sending request {"endpoint":"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-05-13T13%3A29%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-05-13T13%3A45%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [Twilio Video] No calls found. {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] End {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Memory usage {"import_id":813010,"provider":"twilio-video","provider_id":243,"team":"jiminny","team_id":1,"memory_usage":26794472,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"0c7a86b3-e7da-4f27-b3be-79b539df598c","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [SyncActivity] Start {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:25] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-13 13:29:00","to":"2026-05-13 13:45:00"} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"01931d13-26df-400e-ab47-2a17652ed467","trace_id":"17e2deea-6acd-45b9-b0fb-988cc0524abf"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] End {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [SyncActivity] Memory usage {"import_id":813011,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":27195904,"memory_real_usage":67108864,"pid":17492} {"correlation_id":"238a2744-a4ad-4d69-895e-8ef072d714d1","trace_id":"6f36a5e4-9c4a-4f29-b96b-df5256077a37"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:27] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"95287933-34d7-41fe-a30b-b92cbab27a30","trace_id":"aba33402-30c1-4969-af8b-4aa2e8749028"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"c5c5240c-48e6-4950-8848-c6a623c8aefb","trace_id":"214bcd81-6d34-4729-97b5-d03b2548b4f7"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
[2026-05-13 13:46:32] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.73,"memoryPeakAfterCommandInMB":99.73} {"correlation_id":"7bbc46a7-f1f9-4edc-88dd-fd92aac3da97","trace_id":"225ae23e-1163-4b15-8fbd-6ab84afe4db9"}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
36175
|
NULL
|
NULL
|
NULL
|
|
2699
|
111
|
20
|
2026-05-07T11:36:08.248061+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153768248_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","depth":4,"on_screen":true,"value":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".circleci, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".cursor, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".vscode, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".windsurf, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actions, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Component, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActionItems, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activity, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivityAnalytics, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiActivityType, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiAutomation, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiCallScoring, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnything, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dtos, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Events, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnythingPromptService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HistoryService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskJiminnyAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AWS, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BillingManagement, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cache, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CoachingFeedback, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Country, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CustomerApi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Database, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Datadog, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DateTime, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealRisks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ElasticSearch","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Eloquent","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encoding","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encryption","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ES","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Faker","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FeatureFlags","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FFMpeg","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FileSystem","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gecko","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gong","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GuzzleHttp","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KeyPoints","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kiosk","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LanguageDetection","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LiveFeed","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Locks","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Math","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MediaPipeline","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MeetingBot, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MobileSettings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Model, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notification, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Nudge, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParagraphBreaker, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParticipantSpeech, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PartitionedCookie, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PlaybackPage, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Playlist, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Prophet, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProphetAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProsperWorks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Queue, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Job, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAware.php, abstract class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAwareWrapper.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BotsQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Constants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProcessingQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Router, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Saml2, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCIM, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Seeder, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sentry, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Serializer, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Settings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sidekick, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Slack, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TeamInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TimeMemoryMapper, folder","depth":9,"on_screen":false,"role_description":"text"}]...
|
-6881570513140039651
|
-8151256403349000395
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
2697
|
NULL
|
NULL
|
NULL
|
|
2700
|
112
|
22
|
2026-05-07T11:36:09.415867+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153769415_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".circleci, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".cursor, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".vscode, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".windsurf, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actions, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Component, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActionItems, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activity, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivityAnalytics, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiActivityType, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiAutomation, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiCallScoring, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnything, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dtos, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Events, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnythingPromptService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HistoryService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskJiminnyAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AWS, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BillingManagement, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cache, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CoachingFeedback, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Country, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CustomerApi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Database, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Datadog, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DateTime, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealRisks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ElasticSearch","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Eloquent","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encoding","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encryption","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ES","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Faker","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FeatureFlags","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FFMpeg","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FileSystem","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gecko","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gong","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GuzzleHttp","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KeyPoints","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kiosk","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LanguageDetection","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LiveFeed","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Locks","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Math","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MediaPipeline","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MeetingBot, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MobileSettings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Model, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notification, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Nudge, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParagraphBreaker, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParticipantSpeech, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PartitionedCookie, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PlaybackPage, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Playlist, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Prophet, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProphetAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProsperWorks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Queue, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Job, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAware.php, abstract class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAwareWrapper.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BotsQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Constants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProcessingQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Router, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Saml2, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCIM, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Seeder, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sentry, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Serializer, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Settings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sidekick, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Slack, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TeamInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TimeMemoryMapper, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Transcription, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TranscriptionSummary, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twilio, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Uploader, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"UrlGenerator, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Utility, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exceptions, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Service, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BaseRateLimiter.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EfficientJsonParser.php, class","depth":11,"on_screen":false,"role_description":"text"}]...
|
-6881570513140039651
|
-8151256403349000395
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
2698
|
NULL
|
NULL
|
NULL
|
|
2701
|
112
|
23
|
2026-05-07T11:36:12.309254+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153772309_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
This view is read-only
text/html
text/html
text/ht This view is read-only
text/html
text/html
text/html
Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposi...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"This view is read-only","depth":2,"bounds":{"left":0.5794548,"top":0.16280925,"width":0.04488032,"height":0.013567438},"on_screen":true,"value":"This view is read-only","help_text":"text/html","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"text/html","depth":3,"on_screen":false,"help_text":"text/html","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"text/html","depth":3,"bounds":{"left":0.5794548,"top":0.16280925,"width":0.04488032,"height":0.013567438},"on_screen":true,"help_text":"text/html","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"text/html","depth":3,"on_screen":false,"help_text":"text/html","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app ~/jiminny/app, folder","depth":6,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".circleci, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".cursor, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".vscode, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".windsurf, folder","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"app, sources root","depth":7,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Actions, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Component, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActionItems, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activity, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivityAnalytics, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiActivityType, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiAutomation, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiCallScoring, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnything, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dtos, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Events, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskAnythingPromptService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HistoryService.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskJiminnyAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AWS, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BillingManagement, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cache, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CoachingFeedback, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Country, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CustomerApi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Database, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Datadog, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DateTime, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealRisks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ElasticSearch","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Eloquent","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encoding","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Encryption","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ES","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Faker","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FeatureFlags","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FFMpeg","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FileSystem","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gecko","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gong","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GuzzleHttp","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KeyPoints","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kiosk","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LanguageDetection","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LiveFeed","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Locks","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Math","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MediaPipeline","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MeetingBot, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MobileSettings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Model, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Notification, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Nudge, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParagraphBreaker, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ParticipantSpeech, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PartitionedCookie, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PlaybackPage, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Playlist, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Prophet, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProphetAi, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProsperWorks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Queue, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Job, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAware.php, abstract class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitAwareWrapper.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BotsQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Constants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProcessingQueueConstants.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Router, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Saml2, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SCIM, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Seeder, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sentry, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Serializer, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Settings, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Sidekick, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Slack, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TeamInsights, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TimeMemoryMapper, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Transcription, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TranscriptionSummary, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twilio, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Uploader, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"UrlGenerator, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Utility, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Exceptions, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Service, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BaseRateLimiter.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EfficientJsonParser.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProviderRateLimiter.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimiterInstance.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Uuid, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Waveform, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Webhooks, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Workflow, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Configuration, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Console, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Commands, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Activities, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Analytics, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Calendars, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Crm, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Hubspot, folder","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IntegrationApp, folder","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Traits, folder","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AddLayoutEntities.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AutologDelayedCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BullhornCommandAbstract.php, abstract class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BullhornPingCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BullhornSearchCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"BullhornSessionCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CheckActivityLoggableCommand.php, final class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CleanDuplicateFieldDataCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FullSyncOpportunityCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LogActivitiesCommand.php, final class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ManageSyncStrategyCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MatchCrmObjectsCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MatchOpportunityActivitiesCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MigrateProvider.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProcessHubspotObjectsSyncBatches.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PurgeDeletedOpportunitiesCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ResetGovernorLimits.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SendNotLogged.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SetupActivityTypeForFollowUp.php, final class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SetupCloseCrm.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SetupCopperCrm.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SetupCrmCommand.php, abstract class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SetupLayouts.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncAccount.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncContact.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncFieldMetadata.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncHubspotActiveDeals.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncHubspotObjects.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncLead.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncObjects.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunitiesMissingFieldDataCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncOpportunity.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncProfileMetadata.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncTeamMetadata.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"UpdateOpportunitySpecifications.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DealInsights, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dev, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AddRateLimitCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FixHubSpotTokens.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FixMissMatchedCrmActivitiesCommand.php, final class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ImportCallsCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MonitorSocialAccountsState.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dialers, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DTOs, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Elasticsearch, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EngagementStats, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GeckoExport, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Livestream, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Mailboxes, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Migrate, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PlaybackThemes, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Playbooks, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Playlists, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Postmark, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ProphetAi, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Reports, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AutomatedReportsCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AutomatedReportsRetentionPolicyCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AutomatedReportsSendCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CreateMockAskJiminnyReportResultCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DeleteReportCommand.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GenerateMarketingReport.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Team.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Usage.php, class","depth":11,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Slack, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Teams, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Tracks, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Transcription, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Twilio, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Users, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vocabulary, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zoom, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Command.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CreateDatabaseUsers.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DatabaseTableCount.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DeleteOldAiCrmNotesCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DeleteS3LeftoversCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DevPostmanCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DiarizeViaAiParticipantIdentificationCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EncryptTokensCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EngagementStatsRegenerateCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FeatureFlagsHelper.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FixCrossTenantIssues.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FlushRolesPermissionsCache.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GenerateInternalWebhookToken.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GroupSetDefaultLanguageCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HelperTruncateCoachingTables.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HubspotJournalPollingCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"HubspotWebhookServiceCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ImportRecording.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ImportUsersFromCsvFile.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IterateUsersCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JiminnyCacheClearCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JiminnyDebugCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JiminnySetEncryptedTokenManagerModeCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JiminnyTokenInfoCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MakeSlackLiveCoachingChatNotesOn.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ManageScimForTeam.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MarkBranchForEnvironmentPipelineCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"MuteOrganizerChannel.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PhpApm.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PropagateCoachingFeedbackCreatedAtToSectionFeedbacks.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PurgeConferences.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PurgeSoftDeletedOpportunitiesCommand.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PurgeSyncBatchesCommand.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RecalculateDealRisksCommand.php, class","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RemoveDeleteMarkersCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RemoveExpiredNudgesCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RemoveUnusedParticipantSpeechesCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ResetElasticSearch.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RestoreActivityCrmProviderIdCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RestoreActivityTypeCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RunAiCallScoringForUntypedActivitiesCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SeedActivities.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SendNudgeExpirationWarningsCommand.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SyncActivity.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"TrackImported.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"WhichWorkerIsWorkingOnWhichJob.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Scheduling, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kernel.php","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Contracts, folder","depth":8,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Acl, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ActivitySearch, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AiAutomation, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Crm, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"DateTime, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ES, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Http, folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Requests, folder","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ApiResponse.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimited.php","depth":10,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"RateLimitInterface.php","depth":10,"on_screen":false,"role_description":"text"}]...
|
2832706491500642659
|
-8151256403349000395
|
visual_change
|
accessibility
|
NULL
|
This view is read-only
text/html
text/html
text/ht This view is read-only
text/html
text/html
text/html
Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposi...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2702
|
112
|
24
|
2026-05-07T11:36:17.252573+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153777252_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7b1ea2fb-8f36-4897-9970-91b4abba2cc7\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {\"isMonday\":true,\"isWeekend\":false,\"isFirstDayOfMonth\":false,\"currentMonth\":4,\"isQuarterlyMonth\":true} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {\"reportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"teamId\":1,\"frequency\":\"weekly\",\"type\":\"ask_jiminny\"} {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {\"correlation_id\":\"d3f79034-397b-4936-9305-bdd99b23f2dd\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":273.7,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"b453f0f4-0d2c-491c-a935-14c60265ec18\",\"trace_id\":\"a50202d6-5601-46b4-a02e-cf5ac8d061fa\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"c6277ddd-09a6-4b04-8d42-bd395fc07d0a\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Started {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\"} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport] Fetched activity IDs for saved search {\"saved_search_id\":1977,\"user_id\":143,\"activity_count\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Fetched activity IDs {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Not enough activities, skipped {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"activityCount\":0} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [AskJiminnyReport:Generate] Dispatched not-generated notifications {\"automatedReportUuid\":\"4f6ca2b5-1993-48aa-99ad-b66f19f15d43\",\"recipientsCount\":1} {\"correlation_id\":\"f1d3e4df-9591-487f-ac2a-a43ddb89a466\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:27] local.INFO: [Send Report Not Generated Mail] Email sent {\"uuid\":\"cd5b5081-22f8-4d1a-9d6f-f82aca1121f6\",\"email\":\"lukas.kovalik@jiminny.com\"} {\"correlation_id\":\"4255983f-07a4-4872-9ea6-5491fa32bdd5\",\"trace_id\":\"aa0f8702-73eb-4947-a765-2e89244599c3\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"280d5bf6-c34c-45ea-bea7-05d9c028e9d3\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] Performing incremental sync for inbox 212 using history ID: @1777284288 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4\",\"trace_id\":\"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1\"}\n[2026-04-27 10:27:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f55fbf77-7e5f-4c87-accd-011697ca0fa3\",\"trace_id\":\"9bd1c431-26de-4e31-83d8-3129ed9b3b79\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da241053-5f3b-4d02-9504-4ef2987cdbd7\",\"trace_id\":\"364d3fc7-0f11-40c6-8697-d18eff2c4cb6\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring start {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:06] local.NOTICE: Monitoring end {\"correlation_id\":\"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e\",\"trace_id\":\"cb504e84-d924-43a0-82d5-faf1840134ba\"}\n[2026-04-27 10:27:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b8652f0d-1cee-44ae-a0ea-3d3137a882c1\",\"trace_id\":\"7fe19940-0813-4199-a2a8-958de09bd0ee\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"06190462-0f47-403f-8e95-ad5d05bff1fe\",\"trace_id\":\"4aa6bed6-05a1-4661-a9c9-edadc61d84ac\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b561c5d5-e6e3-4091-9517-b0458190a360\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:27:14] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 1 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"98416296-43c2-4834-927e-4a0e86dc99cf\",\"trace_id\":\"bf9679fb-b785-40cb-b814-04a1dc385a1c\"}\n[2026-04-27 10:28:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac\",\"trace_id\":\"25af5e8c-a148-493e-ac9f-4d53f1960177\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a\",\"trace_id\":\"c03103a3-9ab8-480b-9753-7c7c6488f246\"}\n[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"dfad8817-1dde-4622-8320-f5fc1616a8fe\",\"trace_id\":\"d21232b2-60fb-4ca0-838c-ba42e61593f9\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring start {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:09] local.NOTICE: Monitoring end {\"correlation_id\":\"93744c67-4444-41ff-aaad-6aa9cafe294e\",\"trace_id\":\"80e396b0-b1ac-4ec8-838c-00021f98072c\"}\n[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"de768781-5c05-418c-baf3-79f77a8c8694\",\"trace_id\":\"fec74062-3f6d-4cfc-968a-1bb285496db3\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"907d15ed-8c84-41a1-a473-590eebb55dbc\",\"trace_id\":\"ec7bd353-516e-491d-89dd-de44136c1672\"}\n[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"d8709bb9-0f8c-4798-a8c7-e68e24ab6265\",\"trace_id\":\"c5bea1cc-53fe-4bda-a8e2-bec002030bc2\"}\n[2026-04-27 10:28:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: Processing email batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1354,\"provider\":\"google\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce788ac964bbf\",\"from\":\"Nikolay Yankov <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce788ac964bbf\",\"message_id\":\"<jiminny/app/pull/11998/before/2b8a97d6be8b053441d5a845b72dd04803cbb53c/after/8a68a94d39cc76ae546e19f354e8b0dabd577314@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce7883f2fea19\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce7883f2fea19\",\"message_id\":\"<d70689e8-7b14-42ac-a3bf-5f1e81da943e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce761cb049fba\",\"from\":\"The Jiminny Team <no-reply@dev.jiminny.com>\",\"to\":\"lukas.kovalik@jiminny.com\",\"cc\":null} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"no-reply@dev.jiminny.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce761cb049fba\",\"message_id\":\"<017f0e66-9989-446e-9788-7ae83a99137e@mtasv.net>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce74ed398d2c1\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Lukas Kovalik <kovaliklukas@gmail.com>, Author <author@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce74ed398d2c1\",\"message_id\":\"<jiminny/app/pull/12016/c4326142661@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce713dbecf41f\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce713dbecf41f\",\"message_id\":\"<jiminny/infrastructure/pull/725/c4326108250@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce708ed8b5acb\",\"from\":\"Veselin Kulov <notifications@github.com>\",\"to\":\"\\\"jiminny/infrastructure\\\" <infrastructure@noreply.github.com>\",\"cc\":\"Push <push@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce708ed8b5acb\",\"message_id\":\"<jiminny/infrastructure/pull/725/before/186952cc584428fcca17aa364f6cc535d65e804a/after/078246a06b25fb93ad61c7f14472ecb755483f4d@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Processing an email from inbox batch {\"batch\":98446,\"inbox_id\":212,\"email\":\"lukas.kovalik@jiminny.com\",\"email_id\":\"19dce6eea657f2fa\",\"from\":\"\\\"sonarqubecloud[bot]\\\" <notifications@github.com>\",\"to\":\"\\\"jiminny/app\\\" <app@noreply.github.com>\",\"cc\":\"Subscribed <subscribed@noreply.github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsResolver] The sender email is blacklisted, skipping {\"email\":\"notifications@github.com\",\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"team_id\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailImport\\ParticipantsValidator] Email participants are less than 2 {\"inbox_id\":212,\"message_provider_id\":\"19dce6eea657f2fa\",\"message_id\":\"<jiminny/app/pull/11998/c4326088534@github.com>\"} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Deleting successfully processed batch 98446 for inbox 212 {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":1} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5fb3c8c8-3160-4964-ac56-02d6e2cb998c\",\"trace_id\":\"3a6d5e64-ecf2-4700-98cd-3edd56a1dc34\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:26:00, 2026-04-27 10:28:00] {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ef5b3e1a-a06a-4527-9120-b2adfe4e1846\",\"trace_id\":\"d932d64a-3f63-4aca-8abf-bb13e0892cba\"}\n[2026-04-27 10:28:17] local.ERROR: Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. {\"exception\":\"[object] (Illuminate\\\\Contracts\\\\Container\\\\BindingResolutionException(code: 0): Target class [Jiminny\\\\Repositories\\\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#39 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#40 {main}\n\n[previous exception] [object] (ReflectionException(code: -1): Class \\\"Jiminny\\\\Repositories\\\\AjReportsRepository\\\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)\n[stacktrace]\n#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\\\\\Reposit...')\n#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Reposit...')\n#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Reposit...', Array, true)\n#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Reposit...', Array)\n#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Reposit...', Array)\n#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Reposit...')\n#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\\\Container\\\\Container->resolveClass(Object(ReflectionParameter))\n#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\\\Container\\\\Container->resolveDependencies(Array)\n#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\\\Container\\\\Container->build('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\\\Container\\\\Container->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array, true)\n#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\\\Foundation\\\\Application->resolve('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\\\Container\\\\Container->make('Jiminny\\\\\\\\Http\\\\\\\\Co...', Array)\n#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\\\Foundation\\\\Application->make('Jiminny\\\\\\\\Http\\\\\\\\Co...')\n#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\\\Routing\\\\Route->getController()\n#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\\\Routing\\\\Route->controllerMiddleware()\n#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\\\Routing\\\\Route->gatherMiddleware()\n#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\\\Routing\\\\Router->gatherRouteMiddleware(Object(Illuminate\\\\Routing\\\\Route))\n#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\\\Routing\\\\Router->runRouteWithinStack(Object(Illuminate\\\\Routing\\\\Route), Object(Illuminate\\\\Http\\\\Request))\n#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\\\Routing\\\\Router->runRoute(Object(Illuminate\\\\Http\\\\Request), Object(Illuminate\\\\Routing\\\\Route))\n#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\\\Routing\\\\Router->dispatchToRoute(Object(Illuminate\\\\Http\\\\Request))\n#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\\\Routing\\\\Router->dispatch(Object(Illuminate\\\\Http\\\\Request))\n#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\\\Foundation\\\\Http\\\\Kernel->Illuminate\\\\Foundation\\\\Http\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\\\Debugbar\\\\Middleware\\\\InjectDebugbar->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Http\\\\Middleware\\\\HandleCors->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TransformsRequest->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\TrimStrings->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\\\SecureHeaders\\\\SecureHeadersMiddleware->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\\\Http\\\\Middleware\\\\SentryContext->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\\\Foundation\\\\Http\\\\Middleware\\\\InvokeDeferredCallbacks->handle(Object(Illuminate\\\\Http\\\\Request), Object(Closure))\n#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\\\Pipeline\\\\Pipeline->Illuminate\\\\Pipeline\\\\{closure}(Object(Illuminate\\\\Http\\\\Request))\n#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\\\Pipeline\\\\Pipeline->then(Object(Closure))\n#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\\\Foundation\\\\Http\\\\Kernel->sendRequestThroughRouter(Object(Illuminate\\\\Http\\\\Request))\n#40 /home/jiminny/public/index.php(51): Illuminate\\\\Foundation\\\\Http\\\\Kernel->handle(Object(Illuminate\\\\Http\\\\Request))\n#41 {main}\n\"} {\"correlation_id\":\"46b082fc-5a28-4cc4-8bd1-c670f8662e7f\",\"trace_id\":\"8ae7dc26-61c7-42e4-8617-0b85f53e54c1\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.NOTICE: Calendar sync start {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e155562a-84a1-45f5-8897-1779f96886f6\",\"trace_id\":\"12141267-1032-479b-aab5-e17e133007d9\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 2be54cfa-1691-4388-a284-754fdf414400 Correlation ID: 9a934049-899b-45c5-99a5-15c9c470d8a2 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"2be54cfa-1691-4388-a284-754fdf414400\\\",\\\"correlation_id\\\":\\\"9a934049-899b-45c5-99a5-15c9c470d8a2\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27729e9a-0943-41bd-9752-4ec9a8444500 Correlation ID: 824a9761-9387-4c53-ae31-5c242b1d4298 Timestamp: 2026-04-27 10:28:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:26Z\\\",\\\"trace_id\\\":\\\"27729e9a-0943-41bd-9752-4ec9a8444500\\\",\\\"correlation_id\\\":\\\"824a9761-9387-4c53-ae31-5c242b1d4298\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1502,\"provider\":\"google\",\"refreshToken\":\"d417c92ebaa137295a04675f715d0511ae8acac9d779b102eac50d6300116d3e\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1502,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 73b326f0-9fcd-4ff5-ad61-edd6a0504500 Correlation ID: 6bd8fef3-b24c-46d8-8bba-a9b2ab41c108 Timestamp: 2026-04-27 10:28:28Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:28Z\\\",\\\"trace_id\\\":\\\"73b326f0-9fcd-4ff5-ad61-edd6a0504500\\\",\\\"correlation_id\\\":\\\"6bd8fef3-b24c-46d8-8bba-a9b2ab41c108\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: c5f1db6f-22fb-41cc-bd89-c46497634200 Correlation ID: 7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"c5f1db6f-22fb-41cc-bd89-c46497634200\\\",\\\"correlation_id\\\":\\\"7b4df0cc-bf50-4017-9b1a-e25ffb6fe9bf\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8a9488be-81de-40f5-8554-2503eec42566\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:29] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 8d6e82ba-88c3-4ec9-95ee-a4a905803900 Correlation ID: 6ede51d5-704d-4e24-9fb7-88f69f3da5db Timestamp: 2026-04-27 10:28:29Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-04-27 10:28:29Z\\\",\\\"trace_id\\\":\\\"8d6e82ba-88c3-4ec9-95ee-a4a905803900\\\",\\\"correlation_id\\\":\\\"6ede51d5-704d-4e24-9fb7-88f69f3da5db\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Token has been expired or revoked.\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1115,\"provider\":\"google\",\"refreshToken\":\"356b60f12e262a5e24d3042386ef47d6a6cfe3074c242f4426edcec8646192b1\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:30] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1115,\"provider\":\"google\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1421,\"provider\":\"office\",\"refreshToken\":\"9e3e287aa0cc900726e3d4eead2600fb64aa34b437790f6a1fd8048306cb2db9\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:31] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"8fdf411d-8a4f-46c1-a46a-cc84f3c2f2b1\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountObserver] Refresh token was modified, encrypting {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1421,\"provider\":\"office\",\"state\":\"connected\"} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4a0d5722-0aa0-4768-bf49-106fc050bf48\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCMx0nGVsTQEodM41jSlu-5eY2JUTYHZXE-bDro2tnepp8q_Vq3ITNS8CkncjGjcBfaHkza05dCTIlaXcSIoPNGOl9vNckYy_ZhVgE1SWvgRcCeVT-SyogdB9hP-oaWbH9r51OQrrzAwmalK5aCksyUVh9jG_A-mGVzRPnUB4SKa77o5P659lpx1egON48YU2tQ.D2oErKma-mQrBdXxAKdH7beUkp6HS2PXUWYLCgvbP2c\",\"last_sync\":\"2026-04-27 06:28:41\",\"dateMode\":\"daily\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:28:34] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"52b2ff86-82c7-4ed0-b528-35d7d00d69f0\",\"trace_id\":\"bc31793c-511e-425e-b60b-476026a43831\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e95c05b-50c8-4e0b-a01c-efeed6af544c\",\"trace_id\":\"07db4d4f-d6e7-44d9-8e54-4f038ea69afb\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e6e7fbf8-6e80-4529-858e-a4e95d0d3805\",\"trace_id\":\"f91a115a-9fdc-46ce-b9f2-13a1e6d0e325\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring start {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:10] local.NOTICE: Monitoring end {\"correlation_id\":\"211e5e36-1c6c-4198-b928-d2f1525ab0ea\",\"trace_id\":\"c26e980d-6e32-426d-9667-f1d902432b8d\"}\n[2026-04-27 10:29:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"684bdf68-76ee-42dd-9d97-62f414a33b1b\",\"trace_id\":\"284c98ef-5b7f-4572-996c-72c5bc2995f9\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:29:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6e74b148-ae54-42ff-ab72-2ded18d10ff4\",\"trace_id\":\"d05bc9a0-450c-45b2-be3b-225a551ed909\"}\n[2026-04-27 10:30:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30: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.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"24b807e0-b413-4ecc-a89b-365280be88ac\",\"trace_id\":\"542ac70c-6756-4409-8224-0844a7576d9c\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2711ca04-b4a7-4f3a-b0b2-5826fea4da3b\",\"trace_id\":\"2613ffca-f181-4d91-ad55-ec1bdd97ee7e\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring start {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:17] local.NOTICE: Monitoring end {\"correlation_id\":\"e1537475-8481-4144-b9f5-596ea8034b8a\",\"trace_id\":\"f5561d0a-0cb7-4c72-8bde-cce617183529\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8a911b60-16a0-416e-934e-3b7e0280e452\",\"trace_id\":\"3c2bbdd6-985d-4624-b42b-fd9cc2b4756f\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f62efaa6-201f-43b2-bf45-9619982dffb1\",\"trace_id\":\"f1ad3d60-af4e-4427-9d77-6aa71cfed172\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Running conference:monitor:count command for activities in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: [conference:monitor:count] No activities found in (2026-04-27 10:28:00, 2026-04-27 10:30:00] {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf6dc132-ecb8-4efc-bead-06bf1c96cae6\",\"trace_id\":\"9e2b073b-940d-498a-babe-115f633dd954\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f455260d-d1c1-456f-8937-d4bb026d9078\",\"trace_id\":\"f8c2e585-0137-4103-9e16-1b4ce05df2ef\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be7d3c6a-664a-42e8-a4b3-cbd021296404\",\"trace_id\":\"0b250827-4c02-4237-8b34-e5ddd004eba1\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5d8fbdf6-2737-4d73-babe-699c88279e1f\",\"trace_id\":\"0882a963-b02f-4049-b670-12b92f80829a\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Running conference:monitor:start command for activities in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: [conference:monitor:start] No activities found in (2026-04-27 10:20:00, 2026-04-27 10:25:00] {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e8968e47-9acd-4bd4-9e7d-3c415f46df05\",\"trace_id\":\"287fba85-f395-41ab-813d-49cb5d0ea06d\"}\n[2026-04-27 10:30:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:43] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"10:25\",\"to\":\"10:30\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"00:20\",\"to\":\"00:25\"} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b87eb011-7108-46bd-aa90-975ebe41f483\",\"trace_id\":\"1f54c2a6-fad1-4804-87d8-4972a378e91b\"}\n[2026-04-27 10:30:51] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] 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\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:52] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"2e6dfa3d-f07d-4eee-8232-6138133e2fbb\",\"trace_id\":\"41dea86e-0ecc-414e-8303-e60d8ae09976\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a6655a64-38ad-4c65-96f1-f5a294dbb343\",\"trace_id\":\"52cdca32-c0c8-4215-81a2-4263bbde2158\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-04-27T10:32:57.492763Z\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:30:57] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec2d49dd-ab36-4f4e-8a60-7bf5ea384cac\",\"trace_id\":\"b3e89960-9a27-4bf7-8b55-95f5704f9a10\"}\n[2026-04-27 10:30:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:02] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f261cd75-c916-4f21-b4f4-856fe0ed315c\",\"trace_id\":\"6db8819d-ffaa-4fe8-8ccd-0dcc326b8cdc\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811739,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811740,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811741,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811742,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811743,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Dispatching activity sync job {\"import_id\":811744,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f9151ed9-60aa-4b2b-b962-9eab5f75405b\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [CrmOwnerResolver] TeamMember found with active crm connection {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1194,\"provider\":\"twilio-flex\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.INFO: [SyncActivity] Start {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:07] local.NOTICE: [TwilioFlex] Calls import start {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.ALERT: [SyncActivity] Failed {\"import_id\":811739,\"provider\":\"twilio-flex\",\"provider_id\":317,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"[HTTP 401] Unable to fetch page: Authenticate\",\"file\":\"/home/jiminny/vendor/twilio/sdk/src/Twilio/Page.php\",\"line\":60} {\"correlation_id\":\"e7a521c5-fad4-48c2-b880-d572b5d237f4\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:08] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1f928e93-b17e-4518-a1b9-a8280d1d95e8\",\"trace_id\":\"ba203ed6-fe98-4fd7-aa62-8de9fb8ffeca\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT Playbooks_Call_Date__c,Playbooks_Call_Recording__c,CreatedDate,TaskSubtype,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+Playbooks_Call_Date__c%2CPlaybooks_Call_Recording__c%2CCreatedDate%2CTaskSubtype%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d30446d-c469-4ade-80dc-f57f997ea610\",\"trace_id\":\"61eea326-3f40-4a50-a5e6-bddd7fa25d27\"}\n[2026-04-27 10:31:09] local.INFO: [Xant (InsideSales)] No calls found. {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] End {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Memory usage {\"import_id\":811740,\"provider\":\"xant\",\"provider_id\":161,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25149472,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"73848601-79bb-4161-91ae-37acf4385d24\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [SyncActivity] Start {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT AccountId,CreatedDate,TaskSubtype,CallType,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:09] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+AccountId%2CCreatedDate%2CTaskSubtype%2CCallType%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Apollo] No calls found. {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] End {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Memory usage {\"import_id\":811741,\"provider\":\"apollo\",\"provider_id\":441,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25527752,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"11c977fb-9603-4dde-a4d7-f821d47fcdc9\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"\n SELECT call_recording_url__c,TaskSubtype,CreatedDate,CallType,CallDurationInSeconds,Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type\n FROM Task\n WHERE IsDeleted = false\n AND LastModifiedDate >= :from\n AND LastModifiedDate <= :to\n ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ERROR: [Salesforce] Request exception [400] \nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. {\"url\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=%0A++++++++++++SELECT+call_recording_url__c%2CTaskSubtype%2CCreatedDate%2CCallType%2CCallDurationInSeconds%2CId%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%0A++++++++++++++FROM+Task%0A+++++++++++++WHERE+IsDeleted+%3D+false%0A+++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A+++++++++++++++AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z%0A++++++++++ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000\",\"data\":{\"headers\":{\"Authorization\":\"Bearer 00D2g0000008hH4!AQEAQC41CLa_xP1bAbi9E2OUbAOpW..Wx961OtqTwJ3oWpOKs6yPdm47B4yKRBHbRmmJ.Lvd34sjr0gnAkV8fLb8IZWzIW93\"}},\"response\":{\"GuzzleHttp\\\\Psr7\\\\Stream\":\"[{\\\"message\\\":\\\"\\\\nSELECT call_recording_url__c,TaskSubtype\\\\n ^\\\\nERROR at Row:1:Column:8\\\\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\\\",\\\"errorCode\\\":\\\"INVALID_FIELD\\\"}]\"},\"fields\":[]} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.ALERT: [SyncActivity] Failed {\"import_id\":811742,\"provider\":\"groove\",\"provider_id\":228,\"team\":\"jiminny\",\"team_id\":1,\"reason\":\"\nSELECT call_recording_url__c,TaskSubtype\n ^\nERROR at Row:1:Column:8\nNo such column 'call_recording_url__c' on entity 'Task'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.\",\"file\":\"/home/jiminny/app/Services/Crm/Salesforce/Client.php\",\"line\":564} {\"correlation_id\":\"856f8092-8c5e-409d-8aa6-ffb8efd8bfa1\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1500,\"provider\":\"salesforce\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [SyncActivity] Start {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Performing query {\"query\":\"SELECT Id,OwnerId,WhoId,WhatId,Priority,ActivityDate,Subject,Description,Status,Type,twilio_call_sid__c,Lead_UUID__c,Opportunity__c\n FROM Task\n WHERE Type = 'Video'\n AND isClosed = true\n AND IsDeleted = false\n AND LastModifiedDate >= :from\n AND twilio_call_sid__c != NULL AND LastModifiedDate <= :to ORDER BY LastModifiedDate ASC\n LIMIT :limit\",\"params\":{\"from\":\"2026-04-27T10:14:00Z\",\"to\":\"2026-04-27T10:30:00Z\",\"ownerId\":null,\"subType\":null,\"limit\":5000}} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:10] local.INFO: [Salesforce] Sending request {\"endpoint\":\"https://jiminny--stagingenv.sandbox.my.salesforce.com/services/data/v50.0/query/?q=SELECT+Id%2COwnerId%2CWhoId%2CWhatId%2CPriority%2CActivityDate%2CSubject%2CDescription%2CStatus%2CType%2Ctwilio_call_sid__c%2CLead_UUID__c%2COpportunity__c%0A++++++++++++++FROM+Task%0A++++++++++++WHERE+Type+%3D+%27Video%27%0A++++++++++++++AND+isClosed+%3D+true%0A++++++++++++++AND+IsDeleted+%3D+false%0A++++++++++++++AND+LastModifiedDate+%3E%3D+2026-04-27T10%3A14%3A00Z%0A++++++++++++++AND+twilio_call_sid__c+%21%3D+NULL+AND+LastModifiedDate+%3C%3D+2026-04-27T10%3A30%3A00Z+ORDER+BY+LastModifiedDate+ASC%0A+++++++++++++LIMIT+5000 GET\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [Twilio Video] No calls found. {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] End {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SyncActivity] Memory usage {\"import_id\":811743,\"provider\":\"twilio-video\",\"provider_id\":243,\"team\":\"jiminny\",\"team_id\":1,\"memory_usage\":25679680,\"memory_real_usage\":65011712,\"pid\":13616} {\"correlation_id\":\"0ec6aef6-345c-4602-b6a1-646b95e481c0\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a2085168-092a-44b0-8dd2-c8845bc36f86\",\"trace_id\":\"9445425b-6aaf-4a23-9323-ecf85939f967\"}\n[2026-04-27 10:31:12] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"3b9d7e85-b8c2-4ae2-863e-c343c277afdc\",\"trace_id\":\"dba432b8-cb4b-4e76-8684-01d96f91e453\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6881570513140039651
|
-8151256403349000395
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] STARTING Inbox Sync {"host":"docker_lamp_1"} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: [EmailSchedule] FINISHED Inbox Sync {"host":"docker_lamp_1","events":2} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7b1ea2fb-8f36-4897-9970-91b4abba2cc7","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Started {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Checking conditions {"isMonday":true,"isWeekend":false,"isFirstDayOfMonth":false,"currentMonth":4,"isQuarterlyMonth":true} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing daily reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 daily reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Processing weekly reports {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Found 1 weekly reports to process {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Dispatching Generate Report job for report {"reportUuid":"4f6ca2b5-1993-48aa-99ad-b66f19f15d43","teamId":1,"frequency":"weekly","type":"ask_jiminny"} {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [automated-reports] Completed {"correlation_id":"d3f79034-397b-4936-9305-bdd99b23f2dd","trace_id":"aa0f8702-73eb-4947-a765-2e89244599c3"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"b453f0f4-0d2c-491c-a935-14c60265ec18","trace_id":"a50202d6-5601-46b4-a02e-cf5ac8d061fa"}
[2026-04-27 10:26:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] imported 7 emails via full sync workflow for inbox 212 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Gmail] seeding inbox 212 with last message time : 2026-04-27 10:24:57 {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:26:28] local.INFO: [Sync Mailbox] Sync complete {"inbox_id":212} {"correlation_id":"d3e3eb3d-5c83-4d6e-9592-aaa38c1843a4","trace_id":"265be7c0-bf8f-4037-a0d2-57df3ef1d7e1"}
[2026-04-27 10:27:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f55fbf77-7e5f-4c87-accd-011697ca0fa3","trace_id":"9bd1c431-26de-4e31-83d8-3129ed9b3b79"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da241053-5f3b-4d02-9504-4ef2987cdbd7","trace_id":"364d3fc7-0f11-40c6-8697-d18eff2c4cb6"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring start {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:06] local.NOTICE: Monitoring end {"correlation_id":"ad0d871a-a1fd-4725-b2f7-ac8f0fc1857e","trace_id":"cb504e84-d924-43a0-82d5-faf1840134ba"}
[2026-04-27 10:27:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b8652f0d-1cee-44ae-a0ea-3d3137a882c1","trace_id":"7fe19940-0813-4199-a2a8-958de09bd0ee"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"06190462-0f47-403f-8e95-ad5d05bff1fe","trace_id":"4aa6bed6-05a1-4661-a9c9-edadc61d84ac"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b561c5d5-e6e3-4091-9517-b0458190a360","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:27:14] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 1 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"98416296-43c2-4834-927e-4a0e86dc99cf","trace_id":"bf9679fb-b785-40cb-b814-04a1dc385a1c"}
[2026-04-27 10:28:04] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:04] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28: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.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5852bcf1-af92-4d24-8a2d-08a9d4a5cfac","trace_id":"25af5e8c-a148-493e-ac9f-4d53f1960177"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc1cff1f-71b4-4bb1-800f-66e27c0f2b3a","trace_id":"c03103a3-9ab8-480b-9753-7c7c6488f246"}
[2026-04-27 10:28:09] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"dfad8817-1dde-4622-8320-f5fc1616a8fe","trace_id":"d21232b2-60fb-4ca0-838c-ba42e61593f9"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring start {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:09] local.NOTICE: Monitoring end {"correlation_id":"93744c67-4444-41ff-aaad-6aa9cafe294e","trace_id":"80e396b0-b1ac-4ec8-838c-00021f98072c"}
[2026-04-27 10:28:10] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#39 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#40 {main}
[previous exception] [object] (ReflectionException(code: -1): Class \"Jiminny\\Repositories\\AjReportsRepository\" does not exist at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1122)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1122): ReflectionClass->__construct('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#3 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#4 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Reposit...', Array)
#5 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1336): Illuminate\\Foundation\\Application->make('Jiminny\\\\Reposit...')
#6 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1237): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))
#7 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(1162): Illuminate\\Container\\Container->resolveDependencies(Array)
#8 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Http\\\\Co...')
#9 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Http\\\\Co...', Array, true)
#10 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Http\\\\Co...', Array)
#11 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\\Container\\Container->make('Jiminny\\\\Http\\\\Co...', Array)
#12 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\\Foundation\\Application->make('Jiminny\\\\Http\\\\Co...')
#13 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\\Routing\\Route->getController()
#14 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\\Routing\\Route->controllerMiddleware()
#15 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\\Routing\\Route->gatherMiddleware()
#16 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#17 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#18 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#19 /home/jiminny/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#20 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#21 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#22 /home/jiminny/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /home/jiminny/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /home/jiminny/vendor/bepsvpt/secure-headers/src/SecureHeadersMiddleware.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Bepsvpt\\SecureHeaders\\SecureHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /home/jiminny/app/Http/Middleware/SentryContext.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Jiminny\\Http\\Middleware\\SentryContext->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /home/jiminny/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#40 /home/jiminny/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#41 {main}
"} {"correlation_id":"de768781-5c05-418c-baf3-79f77a8c8694","trace_id":"fec74062-3f6d-4cfc-968a-1bb285496db3"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"907d15ed-8c84-41a1-a473-590eebb55dbc","trace_id":"ec7bd353-516e-491d-89dd-de44136c1672"}
[2026-04-27 10:28:13] local.ERROR: Target class [Jiminny\Repositories\AjReportsRepository] does not exist. {"exception":"[object] (Illuminate\\Contracts\\Container\\BindingResolutionException(code: 0): Target class [Jiminny\\Repositories\\AjReportsRepository] does not exist. at /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php:1124)
[stacktrace]
#0 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\\Container\\Container->build('Jiminny\\\\Reposit...')
#1 /home/jiminny/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\\Container\\Container->resolve('Jiminny\\\\Reposit...', Array, true)
#2 /home/jiminny/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\\Foundation\\Application->resolve('Jiminny\\\\Reposit...', Array)
#3 /home/jiminny/vendor/laravel/framewo...
|
2701
|
NULL
|
NULL
|
NULL
|
|
2709
|
111
|
25
|
2026-05-07T11:36:35.424018+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153795424_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24412984,"real_usage":65011712,"pid":13732} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24412984,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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.65,\"average_seconds_per_request\":0.65} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":682.84} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1640.35,\"usage\":24648760,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24623496,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":64.6,\"usage\":24516544,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24554912,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":81.21,\"usage\":24510344,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24548712,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.05,\"usage\":24483760,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24412984,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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.65,\"average_seconds_per_request\":0.65} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":682.84} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1640.35,\"usage\":24648760,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24623496,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":64.6,\"usage\":24516544,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24554912,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":81.21,\"usage\":24510344,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24548712,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.05,\"usage\":24483760,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8123360485970677608
|
5514066055808292964
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24412984,"real_usage":65011712,"pid":13732} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2710
|
112
|
27
|
2026-05-07T11:36:35.455775+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153795455_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24412984,"real_usage":65011712,"pid":13732} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24412984,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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.65,\"average_seconds_per_request\":0.65} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":682.84} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1640.35,\"usage\":24648760,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24623496,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":64.6,\"usage\":24516544,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24554912,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":81.21,\"usage\":24510344,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24548712,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.05,\"usage\":24483760,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f71ac7c4-e9d4-46ad-be82-47e68a8f1199\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24412984,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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.65,\"average_seconds_per_request\":0.65} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":682.84} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":1640.35,\"usage\":24648760,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"766570a3-89a2-4427-81c2-c70a7c780ee3\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24623496,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] 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\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":64.6,\"usage\":24516544,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"cb3b51ca-fd95-4a3f-8366-1dedc565b784\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24554912,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:28] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":81.21,\"usage\":24510344,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"b5acfa3a-a5cb-43e0-8757-36cc6bc0da54\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24548712,\"real_usage\":65011712,\"pid\":13732} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:29] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.05,\"usage\":24483760,\"real_usage\":65011712,\"pid\":13732,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"a40d012c-b10d-4de7-9ea1-ef68239f712b\",\"trace_id\":\"5c938a2d-aea9-4025-a7f7-733d8e8e9711\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cd860d87-3b37-4cc4-b4bc-7788e90ccadc\",\"trace_id\":\"ecfea9bc-0fe5-4224-ba87-0b84ebb94d35\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}\n[2026-05-07 11:36:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a179c5a9-e51e-4929-b0a8-717068ede438\",\"trace_id\":\"e12b0454-0027-4fce-8a8f-8572b5c2a51f\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8123360485970677608
|
5514066055808292964
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f71ac7c4-e9d4-46ad-be82-47e68a8f1199","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24412984,"real_usage":65011712,"pid":13732} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:27] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"766570a3-89a2-4427-81c2-c70a7c780ee3","trace_id":"5c938a2d-aea9-4025-a7f7-733d8e8e9711"}
[2026-05-07 11:36:28] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2711
|
112
|
28
|
2026-05-07T11:36:40.591165+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153800591_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9066241},"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
291277805985683123
|
6378757184196315236
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
2710
|
NULL
|
NULL
|
NULL
|
|
2712
|
111
|
26
|
2026-05-07T11:36:41.089374+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153801089_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
291277805985683123
|
6378757184196315236
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
2709
|
NULL
|
NULL
|
NULL
|
|
2716
|
111
|
29
|
2026-05-07T11:36:47.463970+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153807463_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ah]= Support Daily • in 24 m100% 0 8Thu 7 May 14:36:47DOCKERLast login: Thu MayO ₴1DEV (docker)7 09:44:56 on ttys006H82APP (-zsh)DEV (docker)*3T81-zsh• 84screenpipe*• $5-zsh*6Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parentsPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ devroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00*Syncing opportunity for HubspotYour HubSpotaccount has become disconnected. Please login to Jiminny to reconnect. skipping...root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -RDEVaccess_tokenCFPAsBNZxoDp5kAcRyeB1QoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAACNeR-JHgMxIZQLNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQLNQM18kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAY1access_token_expires_at=> 2026-05-07 11:41:20refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371refresh_token_expires_at =>root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'Syncing opportunity for HubspotSyncing opportunities modified since 2026-05-01 00:00:00. ..Synced 6 opportunities.root@docker_lamp_1:/home/jiminny#|...
|
NULL
|
3172529542174168783
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ah]= Support Daily • in 24 m100% 0 8Thu 7 May 14:36:47DOCKERLast login: Thu MayO ₴1DEV (docker)7 09:44:56 on ttys006H82APP (-zsh)DEV (docker)*3T81-zsh• 84screenpipe*• $5-zsh*6Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parentsPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20773-fix-automated-reports-user-pilot-tracking) $ devroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00*Syncing opportunity for HubspotYour HubSpotaccount has become disconnected. Please login to Jiminny to reconnect. skipping...root@docker_lamp_1:/home/jiminny# php artisan jiminny:token-info -A 1499 -RDEVaccess_tokenCFPAsBNZxoDp5kAcRyeB1QoE5SM7DSgNuYTFSAFoAYABo3tj9DHAAeAACNeR-JHgMxIZQLNQMl8kQEwrAgwACAkUAhIJBB4BAQEDBxiCiYwCIN7Y_Qwo0qwCMhTnG549n-YtNuc1jgj-2AsLPSmw3DoyQLNQM18kQEwrAiUACBkGawEFThwBARIBAQEEATEEAQEBAQEBAQEBAQUBEggBAQEBAY1access_token_expires_at=> 2026-05-07 11:41:20refresh_token => d5ab04e2-2109-4c0b-b513-8cba1dd54371refresh_token_expires_at =>root@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --from='2026-05-01 00:00:00'Syncing opportunity for HubspotSyncing opportunities modified since 2026-05-01 00:00:00. ..Synced 6 opportunities.root@docker_lamp_1:/home/jiminny#|...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2717
|
112
|
30
|
2026-05-07T11:36:47.577007+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153807577_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavigarecoderTavsco.s°9 masterProlede PhostormVIewINavigarecoderTavsco.s°9 masterProledey(C) [EMAIL]© Uuid.php> D Traits> D UseCases› DUser› DUtils› D Validation>Ovophp nelpers.onp© InitialFrontendState.phpc) Jiminny.phpc) Plan.ohoc) serializer.onoC) TeamScimDetails.oho> bootstrar> O build• contial› D contrib• database, m docsfront-endlangnode_modules library root• O phpstanIM nublic> D resourcesDroutesphp api.phpphp api_v2.phppnp console.ongpnp customer_aoi.onopnp embeddea.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage> D debugbarM frameworkv Mloas.aitianoree audio wav= custom.loa720723727729=hubsnot-iournal-noll.log= laravel loal734 0 >740us tht is< $0 l6f Support Daily - in 24m100% L2Thu 7 May 14:36:47= custom.logE laravel.log X 4 SF (jiminny@localhost]A HS_Jocal [jiminny@localhost]# console [PKol)# console lcuy« console [STAGING]© RematchActivityOnCrmObjectDetach.phpDeleteCrmEntityTrait.phpAddkateLimitcommano.php© Hubspot/Client.php x © HandleRateLimit.php© SyncTeamMetadata.php©RateLimit.php© Configuration.php© RateLimitException.php©RateLimitinterface.php©) ProviderkateLimiter.phgclass Cllent extends Baseclient 1mpLements Hubspotclientintertace6826971* @return array<CrmFieldOption>public function fetch0pportunityFieldOptions(Field $field): arrayf…;* achnows badkequest* achrows hubspoctxcepc1onpublic function makeRequest(string $endpoint, Smethod = 'GET', $payload = [], ?string $queryString = null)Sendpoint = self::BASEURL . Sendpoint.1 Smethod === "GET') <wFelse {Sresponse = $this->getInstance()->getClient()->request($method, $endpoint, ["json'= (Snavload)ISremaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining');1 "309"Sinterval = Sresponse->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"$body=son decodel(scring) sresponse->gerbodyassociative: true);(Illuminate\Support\Facades\Log: :channeZ( channel:'custom_channel')->info('$max' . PHP_EOL . print_r($max, return: true));\Illuminate\Support\Facades\Log: :channeZ( channel:'custom_channel')->info('Sremaining' . PHP_EOL . print_r($remaining, return: true));uuLuminace supporc racades Loo..channel channel'custom_channel')->info('Sinterval ' . PHP_EOL . print_ r(Sinterval. return: true)):ILLuminate Support Facades Loq::channel( channel'custom_channel')->info('$body' . PHP_EOL . print_r($body, return: true));* athrows HubsnotExcentionnublic function createMeetina(arrav Spavload): Resnonse-...?...
|
NULL
|
-4939622420793281627
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavigarecoderTavsco.s°9 masterProlede PhostormVIewINavigarecoderTavsco.s°9 masterProledey(C) [EMAIL]© Uuid.php> D Traits> D UseCases› DUser› DUtils› D Validation>Ovophp nelpers.onp© InitialFrontendState.phpc) Jiminny.phpc) Plan.ohoc) serializer.onoC) TeamScimDetails.oho> bootstrar> O build• contial› D contrib• database, m docsfront-endlangnode_modules library root• O phpstanIM nublic> D resourcesDroutesphp api.phpphp api_v2.phppnp console.ongpnp customer_aoi.onopnp embeddea.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage> D debugbarM frameworkv Mloas.aitianoree audio wav= custom.loa720723727729=hubsnot-iournal-noll.log= laravel loal734 0 >740us tht is< $0 l6f Support Daily - in 24m100% L2Thu 7 May 14:36:47= custom.logE laravel.log X 4 SF (jiminny@localhost]A HS_Jocal [jiminny@localhost]# console [PKol)# console lcuy« console [STAGING]© RematchActivityOnCrmObjectDetach.phpDeleteCrmEntityTrait.phpAddkateLimitcommano.php© Hubspot/Client.php x © HandleRateLimit.php© SyncTeamMetadata.php©RateLimit.php© Configuration.php© RateLimitException.php©RateLimitinterface.php©) ProviderkateLimiter.phgclass Cllent extends Baseclient 1mpLements Hubspotclientintertace6826971* @return array<CrmFieldOption>public function fetch0pportunityFieldOptions(Field $field): arrayf…;* achnows badkequest* achrows hubspoctxcepc1onpublic function makeRequest(string $endpoint, Smethod = 'GET', $payload = [], ?string $queryString = null)Sendpoint = self::BASEURL . Sendpoint.1 Smethod === "GET') <wFelse {Sresponse = $this->getInstance()->getClient()->request($method, $endpoint, ["json'= (Snavload)ISremaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining');1 "309"Sinterval = Sresponse->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"$body=son decodel(scring) sresponse->gerbodyassociative: true);(Illuminate\Support\Facades\Log: :channeZ( channel:'custom_channel')->info('$max' . PHP_EOL . print_r($max, return: true));\Illuminate\Support\Facades\Log: :channeZ( channel:'custom_channel')->info('Sremaining' . PHP_EOL . print_r($remaining, return: true));uuLuminace supporc racades Loo..channel channel'custom_channel')->info('Sinterval ' . PHP_EOL . print_ r(Sinterval. return: true)):ILLuminate Support Facades Loq::channel( channel'custom_channel')->info('$body' . PHP_EOL . print_r($body, return: true));* athrows HubsnotExcentionnublic function createMeetina(arrav Spavload): Resnonse-...?...
|
2713
|
NULL
|
NULL
|
NULL
|
|
2738
|
111
|
40
|
2026-05-07T11:38:04.213613+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153884213_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9067406159853117642
|
6666989725209466980
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
2736
|
NULL
|
NULL
|
NULL
|
|
2739
|
112
|
41
|
2026-05-07T11:38:04.426350+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153884426_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9067406159853117642
|
6666989725209466980
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2742
|
111
|
42
|
2026-05-07T11:38:08.024805+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153888024_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2199466652252128033
|
6666989725209335916
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
2740
|
NULL
|
NULL
|
NULL
|
|
2743
|
112
|
43
|
2026-05-07T11:38:07.941095+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778153887941_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2199466652252128033
|
6666989725209335916
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2799
|
113
|
17
|
2026-05-07T11:41:17.728102+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154077728_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2793288140694701573
|
6800839811571227773
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
2798
|
NULL
|
NULL
|
NULL
|
|
2801
|
114
|
15
|
2026-05-07T11:41:19.014989+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154079014_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2793288140694701573
|
6800839811571227773
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2823
|
113
|
29
|
2026-05-07T11:42:29.910372+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154149910_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23322888,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] 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.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":591.05} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":809.97,\"usage\":23679496,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23657792,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.37,\"usage\":24038264,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24076632,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":27.27,\"usage\":24318200,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24356568,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":39.01,\"usage\":24603160,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] 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\":243.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b442283-c65e-4af6-b529-9f0bc21e60ac\",\"trace_id\":\"54331400-ef6a-4b6e-8351-ecbe29c497fd\"}\n[2026-05-07 11:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b442283-c65e-4af6-b529-9f0bc21e60ac\",\"trace_id\":\"54331400-ef6a-4b6e-8351-ecbe29c497fd\"}\n[2026-05-07 11:42:09] local.NOTICE: Monitoring start {\"correlation_id\":\"31ba3d52-9bd4-47f9-8551-df00e51e349c\",\"trace_id\":\"c378b3e9-48a5-48a5-8e13-12a1c8fd58bd\"}\n[2026-05-07 11:42:09] local.NOTICE: Monitoring end {\"correlation_id\":\"31ba3d52-9bd4-47f9-8551-df00e51e349c\",\"trace_id\":\"c378b3e9-48a5-48a5-8e13-12a1c8fd58bd\"}\n[2026-05-07 11:42:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75e6d969-5709-49ba-841f-7e93fc38aeba\",\"trace_id\":\"d168e2c0-e6c1-46bf-80dc-84147819fdc9\"}\n[2026-05-07 11:42:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75e6d969-5709-49ba-841f-7e93fc38aeba\",\"trace_id\":\"d168e2c0-e6c1-46bf-80dc-84147819fdc9\"}\n[2026-05-07 11:42:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:40:00, 2026-05-07 11:42:00] {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:40:00, 2026-05-07 11:42:00] {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"569d93c9-c88f-434f-b061-c5fa8f456909\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-contact\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [HubSpot] importContact {\"crm_provider_id\":\"21351\",\"config_id\":2} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-contact\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:36:44] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.48,\"average_seconds_per_request\":0.48} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":659,\"company_assoc_api_ms\":276,\"contact_assoc_api_ms\":203,\"prepare_entities_ms\":19,\"prepare_accounts_ms\":3,\"prepare_contacts_ms\":17,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":152,\"avg_deal_ms\":25,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1161.39} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"462baf35-d312-4641-9896-e8b15e8fdb82\",\"trace_id\":\"aeb070fe-166a-48bf-99c0-acfcbfb40c1b\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {\"runtime_seconds\":56,\"total_cycles\":5,\"files_downloaded\":0,\"empty_files\":0,\"other_portal_skipped\":0,\"total_events\":0,\"events_per_file\":0,\"avg_api_ms\":176.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"8568abe7-be33-417c-aa2f-b1bd53fb4adc\",\"trace_id\":\"582bff07-5ea4-4469-8ca8-efa41b04d46d\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"34ae70b9-ee92-4e0c-bb97-3ecc204278be\",\"trace_id\":\"0d02e69d-5e33-4059-938c-d41350a39b72\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6052f7ad-dde1-41de-8051-5ba8d54babdd\",\"trace_id\":\"2e216848-ddf9-4f8c-8808-93a09cef8f5f\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring start {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:07] local.NOTICE: Monitoring end {\"correlation_id\":\"64decce4-a339-4c1b-8a73-4f612ef2eea2\",\"trace_id\":\"07e59e6c-d681-41f9-ba04-5cab00e9a754\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0326b1c8-69ac-4d09-aae5-e808abc71f46\",\"trace_id\":\"2d16668b-26b0-44cf-a533-493500255667\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa512302-070c-4f99-b3ef-1a43c71b6297\",\"trace_id\":\"9e5c4036-6a42-4c64-a9b3-f11143254293\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3d4318e-3db2-413c-8fe1-8827ec834020\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae\",\"trace_id\":\"f4d85ec2-b1d2-4418-bb65-814c209e628f\"}\n[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20519,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"1a81e470-75ac-4728-9d45-9f879fc96c5b\",\"trace_id\":\"7184ea88-9f01-42bc-9508-8e4ad0c1204b\"}\n[2026-05-07 11:37:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"798a3e91-233c-4b61-aa8e-80a7b84ac45f\",\"trace_id\":\"870e454c-3a47-419e-88f1-2321d38b8937\"}\n[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":20661,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"293fa4a8-dc12-452e-88a3-f7408f8ed676\",\"trace_id\":\"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3\"}\n[2026-05-07 11:38:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":6,\"total_elapsed_seconds\":0.56,\"average_seconds_per_request\":0.56} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {\"teamId\":2,\"deal_count\":6,\"total_ms\":987,\"company_assoc_api_ms\":336,\"contact_assoc_api_ms\":284,\"prepare_entities_ms\":28,\"prepare_accounts_ms\":16,\"prepare_contacts_ms\":12,\"total_companies\":5,\"missing_companies\":0,\"total_contacts\":23,\"missing_contacts\":0,\"deals_loop_ms\":325,\"avg_deal_ms\":54,\"slow_deals_count\":0,\"slow_deals\":[]} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":5,\"total\":6,\"last_synced_id\":\"297846423\",\"duration_ms\":1638.35} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6c1736-f06b-4fbc-80f1-e1283f2021fb\",\"trace_id\":\"cef5d248-2fbf-443a-915a-81470cec6a21\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"495bd4b0-3e91-44bb-94f0-7bcea25a5345\",\"trace_id\":\"78e85846-2c81-4b00-9110-e5e8a0bdc4da\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"93769c86-ee16-46cc-be04-cd4b08e3cf33\",\"trace_id\":\"1103f1fc-40ad-49d7-bf22-7f01532c756c\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring start {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:13] local.NOTICE: Monitoring end {\"correlation_id\":\"8c6c2a02-00fb-406e-af38-ae25aad16c54\",\"trace_id\":\"249d2657-8417-4dfe-b67c-66be6fca8694\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0d6b5f43-63fb-4072-a0e1-0e7b379db5de\",\"trace_id\":\"7e481e95-9437-49c0-a258-b3c2d6d87f56\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e\",\"trace_id\":\"544632c2-52c0-49a4-85d4-b5d5b9db077e\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d2769d3b-aff0-4d00-9ed1-37742d643f2b\",\"trace_id\":\"eb4fb4e1-4da0-4151-b1a8-389e37c88d87\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:38:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"96c1fede-0432-4a49-b5c5-a4b9533287ea\",\"trace_id\":\"62fa18ad-24cf-4d13-8b06-3871febf943d\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"84723ff8-d3bc-41b4-9769-65eaba70fb10\",\"trace_id\":\"4efccf02-7244-4982-b850-87d04d3b4df1\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4651e0b1-755b-475e-938f-fb9ccefa6074\",\"trace_id\":\"13cb2868-a387-4b79-b60f-f6b7937eda93\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring start {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:12] local.NOTICE: Monitoring end {\"correlation_id\":\"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4\",\"trace_id\":\"fd1542ea-3823-48c1-85b3-e620396c29fd\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19de2bd2-47ee-42f3-873c-62d01a987abc\",\"trace_id\":\"3e08eb49-02aa-4f59-95e8-7fd19d76562c\"}\n[2026-05-07 11:39:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"0ac12f88-39be-4293-b9e3-8ed0a283ac9f\",\"trace_id\":\"2e1f2a01-f198-4546-8388-31c03e1754ca\"}\n[2026-05-07 11:39:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6599e8bd-c922-487b-b661-b7330cfdace5\",\"trace_id\":\"3a10c02c-0143-42c5-971f-62e691058eab\"}\n[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"b4f2483a-e1fb-4615-acf5-a2562d196219\",\"trace_id\":\"14099814-a8f4-4005-928c-cdd985f5c495\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8ccc84e7-7858-440c-918d-61299862a13d\",\"trace_id\":\"0d4cf449-5d92-4e65-9672-a9a5cdf0810f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38310f03-0dbd-4955-9cf2-2bae6905ac3a\",\"trace_id\":\"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring start {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:11] local.NOTICE: Monitoring end {\"correlation_id\":\"94109780-865d-473e-83c3-781f3de2e339\",\"trace_id\":\"8489515d-b1d6-464e-bbc6-f13c8dcb4799\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b31607af-9a8b-4dd0-8023-955ed1abbd5f\",\"trace_id\":\"bcd15f23-7a12-4d4d-90d8-268cfa78b53f\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fbe932e3-be81-4f8d-af5c-4652ecca569c\",\"trace_id\":\"d5e594cd-4321-4cc4-b60e-6b6850c930dd\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c4d3c01a-f87e-437a-806b-72e1dbc7278d\",\"trace_id\":\"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba\"}\n[2026-05-07 11:40:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18\",\"trace_id\":\"596bfe2a-fafd-4f59-9687-9db74a8ccbad\"}\n[2026-05-07 11:40:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"78165a5d-1f46-4343-9177-303295dfc493\",\"trace_id\":\"d7edcdde-1cdb-4b0d-a730-9f6146f32210\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e86d95d9-46da-4bd4-a5ff-ef6db7187106\",\"trace_id\":\"e43cb684-bf76-4bf3-a26b-caaa28f0b14b\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41a4c022-0921-49a2-9ff5-0e632363db18\",\"trace_id\":\"b14cdd47-4c86-4a48-8be3-db1276c58b24\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:35\",\"to\":\"11:40\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:30\",\"to\":\"01:35\"} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2dbb6a45-5376-4b21-b44c-57be94817ebb\",\"trace_id\":\"b27ef11b-a014-4443-b25e-cc26e25e8ab6\"}\n[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cbd32bae-a981-4448-8c3a-37af06a34ee1\",\"trace_id\":\"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f\",\"trace_id\":\"24de6376-26e1-415e-b293-2b293b73a08c\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:42:36.772314Z\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:36] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"da96e68d-de75-42cb-a56c-f06e38b7a15c\",\"trace_id\":\"59de3ae1-2e54-48e8-b387-81e6e94b36cb\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50\",\"trace_id\":\"02ba8e4b-992d-4833-af01-cb324ee2ee3a\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:43] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"929e5f37-c1d8-4b69-83ba-5927d55b34f3\",\"trace_id\":\"45e488ca-3233-47f0-b9d0-6fd17d893c3e\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9eae3c8c-d9c0-401a-9460-8799aaaf4448\",\"trace_id\":\"a0ea2929-2179-4846-ba27-04c4ff9e776f\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"131b5e58-5016-4b93-8e6e-b74ad6e18386\",\"trace_id\":\"a95cdcf9-cdbb-4395-83d5-feceb6c4723b\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring start {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:08] local.NOTICE: Monitoring end {\"correlation_id\":\"4a8077b3-d474-4c53-a31a-5392401b03ef\",\"trace_id\":\"532f3f03-fef6-4c69-85e3-388a734c12cc\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"99c4f411-1e07-4c3a-8019-6c9711a94694\",\"trace_id\":\"97a24b93-205b-48be-87d2-6aceee83a927\"}\n[2026-05-07 11:41:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a0712d9-237d-4091-8cd9-146358d416f7\",\"trace_id\":\"e892534a-c249-4710-9ed0-a638b5ef3e07\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1d5d0419-1ad8-4683-ba83-c0e2cd705d98\",\"trace_id\":\"c507dc76-29df-47df-acdc-bf7955175da4\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2f34db2c-52e5-4e69-996d-df46c15f939b\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23322888,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] 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.54,\"average_seconds_per_request\":0.54} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:16] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":591.05} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":809.97,\"usage\":23679496,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"43204dc2-e176-47b2-99eb-ed49b16ca289\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23657792,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"33e34a7a-1c02-4f04-87ac-22c3a385e6e3\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":306,\"sociable_id\":109,\"provider_user_id\":\"11348452\",\"expires\":1701077403,\"refresh_token_expires\":null,\"provider\":\"hubspot\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2020-09-01 16:59:04\",\"updated_at\":\"2023-11-27 09:30:03\"}}} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":77.37,\"usage\":24038264,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f4d3dabd-7297-4db7-90d4-ff5a8814cfdd\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24076632,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":27.27,\"usage\":24318200,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"364d0e51-ee7a-4afc-a884-237225c92937\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24356568,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:17] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":39.01,\"usage\":24603160,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"429a5174-955c-439b-9216-b3289b783493\",\"trace_id\":\"faf8dc37-7724-450b-a44f-f63b5ea6b816\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] 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\":243.5,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:41:33] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6340348b-99f2-4faf-a141-f083a32325cd\",\"trace_id\":\"2f4b7884-1503-4fd4-9c6b-327e7f0191fd\"}\n[2026-05-07 11:42:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ea9145ec-8b8b-4d19-bed5-cedec7796fba\",\"trace_id\":\"a23365df-9156-42e0-849a-42e0cb56dcf6\"}\n[2026-05-07 11:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4b442283-c65e-4af6-b529-9f0bc21e60ac\",\"trace_id\":\"54331400-ef6a-4b6e-8351-ecbe29c497fd\"}\n[2026-05-07 11:42:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4b442283-c65e-4af6-b529-9f0bc21e60ac\",\"trace_id\":\"54331400-ef6a-4b6e-8351-ecbe29c497fd\"}\n[2026-05-07 11:42:09] local.NOTICE: Monitoring start {\"correlation_id\":\"31ba3d52-9bd4-47f9-8551-df00e51e349c\",\"trace_id\":\"c378b3e9-48a5-48a5-8e13-12a1c8fd58bd\"}\n[2026-05-07 11:42:09] local.NOTICE: Monitoring end {\"correlation_id\":\"31ba3d52-9bd4-47f9-8551-df00e51e349c\",\"trace_id\":\"c378b3e9-48a5-48a5-8e13-12a1c8fd58bd\"}\n[2026-05-07 11:42:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75e6d969-5709-49ba-841f-7e93fc38aeba\",\"trace_id\":\"d168e2c0-e6c1-46bf-80dc-84147819fdc9\"}\n[2026-05-07 11:42:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75e6d969-5709-49ba-841f-7e93fc38aeba\",\"trace_id\":\"d168e2c0-e6c1-46bf-80dc-84147819fdc9\"}\n[2026-05-07 11:42:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2a29f673-3c11-45ee-9d17-827c8bb90c70\",\"trace_id\":\"43b02c7e-b9bf-488e-bc3a-2ad7cca9ef69\"}\n[2026-05-07 11:42:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:40:00, 2026-05-07 11:42:00] {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:40:00, 2026-05-07 11:42:00] {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"85192464-3f7f-4663-992d-e32eb63eed2a\",\"trace_id\":\"34a08e19-3eec-4c51-bebe-1b0e11f49d30\"}\n[2026-05-07 11:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"80983d80-1f63-4bc5-a628-53d90873569e\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"569d93c9-c88f-434f-b061-c5fa8f456909\",\"trace_id\":\"55b50bb9-17d5-418b-975b-24ce77f8e877\"}\n[2026-05-07 11:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-contact\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: [HubSpot] importContact {\"crm_provider_id\":\"21351\",\"config_id\":2} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}\n[2026-05-07 11:42:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-contact\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"af67e8da-fd3a-4eb1-bec8-9e353b65c227\",\"trace_id\":\"43b80b85-1141-4bd2-aa31-8f14c0c35ec1\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2793288140694701573
|
6800839811571227773
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:36:44] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:44] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:45] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.48,"average_seconds_per_request":0.48} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":659,"company_assoc_api_ms":276,"contact_assoc_api_ms":203,"prepare_entities_ms":19,"prepare_accounts_ms":3,"prepare_contacts_ms":17,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":152,"avg_deal_ms":25,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1161.39} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"462baf35-d312-4641-9896-e8b15e8fdb82","trace_id":"aeb070fe-166a-48bf-99c0-acfcbfb40c1b"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Service ending {"runtime_seconds":56,"total_cycles":5,"files_downloaded":0,"empty_files":0,"other_portal_skipped":0,"total_events":0,"events_per_file":0,"avg_api_ms":176.5,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:36:52] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"8568abe7-be33-417c-aa2f-b1bd53fb4adc","trace_id":"582bff07-5ea4-4469-8ca8-efa41b04d46d"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"34ae70b9-ee92-4e0c-bb97-3ecc204278be","trace_id":"0d02e69d-5e33-4059-938c-d41350a39b72"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6052f7ad-dde1-41de-8051-5ba8d54babdd","trace_id":"2e216848-ddf9-4f8c-8808-93a09cef8f5f"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring start {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:07] local.NOTICE: Monitoring end {"correlation_id":"64decce4-a339-4c1b-8a73-4f612ef2eea2","trace_id":"07e59e6c-d681-41f9-ba04-5cab00e9a754"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0326b1c8-69ac-4d09-aae5-e808abc71f46","trace_id":"2d16668b-26b0-44cf-a533-493500255667"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aa512302-070c-4f99-b3ef-1a43c71b6297","trace_id":"9e5c4036-6a42-4c64-a9b3-f11143254293"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3d4318e-3db2-413c-8fe1-8827ec834020","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3e5f2a44-295d-4c28-b5e9-1a649c1f49ae","trace_id":"f4d85ec2-b1d2-4418-bb65-814c209e628f"}
[2026-05-07 11:37:21] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20519,"workerId":"","target":"activities"} {"correlation_id":"1a81e470-75ac-4728-9d45-9f879fc96c5b","trace_id":"7184ea88-9f01-42bc-9508-8e4ad0c1204b"}
[2026-05-07 11:37:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"798a3e91-233c-4b61-aa8e-80a7b84ac45f","trace_id":"870e454c-3a47-419e-88f1-2321d38b8937"}
[2026-05-07 11:37:53] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":20661,"workerId":"","target":"activities"} {"correlation_id":"293fa4a8-dc12-452e-88a3-f7408f8ed676","trace_id":"e3d77ea8-2ff3-4b4e-a388-8f21192e51f3"}
[2026-05-07 11:38:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:04] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":6,"total_elapsed_seconds":0.56,"average_seconds_per_request":0.56} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] importOpportunityBatch timing {"teamId":2,"deal_count":6,"total_ms":987,"company_assoc_api_ms":336,"contact_assoc_api_ms":284,"prepare_entities_ms":28,"prepare_accounts_ms":16,"prepare_contacts_ms":12,"total_companies":5,"missing_companies":0,"total_contacts":23,"missing_contacts":0,"deals_loop_ms":325,"avg_deal_ms":54,"slow_deals_count":0,"slow_deals":[]} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":5,"total":6,"last_synced_id":"297846423","duration_ms":1638.35} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6c1736-f06b-4fbc-80f1-e1283f2021fb","trace_id":"cef5d248-2fbf-443a-915a-81470cec6a21"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"495bd4b0-3e91-44bb-94f0-7bcea25a5345","trace_id":"78e85846-2c81-4b00-9110-e5e8a0bdc4da"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"93769c86-ee16-46cc-be04-cd4b08e3cf33","trace_id":"1103f1fc-40ad-49d7-bf22-7f01532c756c"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring start {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:13] local.NOTICE: Monitoring end {"correlation_id":"8c6c2a02-00fb-406e-af38-ae25aad16c54","trace_id":"249d2657-8417-4dfe-b67c-66be6fca8694"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0d6b5f43-63fb-4072-a0e1-0e7b379db5de","trace_id":"7e481e95-9437-49c0-a258-b3c2d6d87f56"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e3a8fa0b-50b5-4110-81a5-d8490bb9d93e","trace_id":"544632c2-52c0-49a4-85d4-b5d5b9db077e"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:36:00, 2026-05-07 11:38:00] {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d2769d3b-aff0-4d00-9ed1-37742d643f2b","trace_id":"eb4fb4e1-4da0-4151-b1a8-389e37c88d87"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:38:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"96c1fede-0432-4a49-b5c5-a4b9533287ea","trace_id":"62fa18ad-24cf-4d13-8b06-3871febf943d"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"84723ff8-d3bc-41b4-9769-65eaba70fb10","trace_id":"4efccf02-7244-4982-b850-87d04d3b4df1"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4651e0b1-755b-475e-938f-fb9ccefa6074","trace_id":"13cb2868-a387-4b79-b60f-f6b7937eda93"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring start {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:12] local.NOTICE: Monitoring end {"correlation_id":"e6f0d299-8ea5-43e2-ba73-3123b42ebaf4","trace_id":"fd1542ea-3823-48c1-85b3-e620396c29fd"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"19de2bd2-47ee-42f3-873c-62d01a987abc","trace_id":"3e08eb49-02aa-4f59-95e8-7fd19d76562c"}
[2026-05-07 11:39:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"0ac12f88-39be-4293-b9e3-8ed0a283ac9f","trace_id":"2e1f2a01-f198-4546-8388-31c03e1754ca"}
[2026-05-07 11:39:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6599e8bd-c922-487b-b661-b7330cfdace5","trace_id":"3a10c02c-0143-42c5-971f-62e691058eab"}
[2026-05-07 11:39:22] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"b4f2483a-e1fb-4615-acf5-a2562d196219","trace_id":"14099814-a8f4-4005-928c-cdd985f5c495"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8ccc84e7-7858-440c-918d-61299862a13d","trace_id":"0d4cf449-5d92-4e65-9672-a9a5cdf0810f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"38310f03-0dbd-4955-9cf2-2bae6905ac3a","trace_id":"f042fe60-f276-4ffa-9be6-d5f7c7cbe86f"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring start {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:11] local.NOTICE: Monitoring end {"correlation_id":"94109780-865d-473e-83c3-781f3de2e339","trace_id":"8489515d-b1d6-464e-bbc6-f13c8dcb4799"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b31607af-9a8b-4dd0-8023-955ed1abbd5f","trace_id":"bcd15f23-7a12-4d4d-90d8-268cfa78b53f"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fbe932e3-be81-4f8d-af5c-4652ecca569c","trace_id":"d5e594cd-4321-4cc4-b60e-6b6850c930dd"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:38:00, 2026-05-07 11:40:00] {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c4d3c01a-f87e-437a-806b-72e1dbc7278d","trace_id":"fd0ec1e9-892e-4a16-8d51-fa6f665e59ba"}
[2026-05-07 11:40:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"769ba5b3-7c6b-47d1-b9f7-c1cde433ae18","trace_id":"596bfe2a-fafd-4f59-9687-9db74a8ccbad"}
[2026-05-07 11:40:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:24] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"78165a5d-1f46-4343-9177-303295dfc493","trace_id":"d7edcdde-1cdb-4b0d-a730-9f6146f32210"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Running pre-meeting notification command {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e86d95d9-46da-4bd4-a5ff-ef6db7187106","trace_id":"e43cb684-bf76-4bf3-a26b-caaa28f0b14b"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:30:00, 2026-05-07 11:35:00] {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41a4c022-0921-49a2-9ff5-0e632363db18","trace_id":"b14cdd47-4c86-4a48-8be3-db1276c58b24"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:35","to":"11:40"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:30","to":"01:35"} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2dbb6a45-5376-4b21-b44c-57be94817ebb","trace_id":"b27ef11b-a014-4443-b25e-cc26e25e8ab6"}
[2026-05-07 11:40:31] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.ERROR: Failed to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.ERROR: Failed to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06","reason":"missing or invalid refresh token","previous":""} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:32] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"cbd32bae-a981-4448-8c3a-37af06a34ee1","trace_id":"f1008d7f-2e4b-48eb-b4b7-5ea7555d1627"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6d6b8cf2-518c-4a2e-aa28-f0d26418c36f","trace_id":"24de6376-26e1-415e-b293-2b293b73a08c"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:42:36.772314Z"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:36] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"da96e68d-de75-42cb-a56c-f06e38b7a15c","trace_id":"59de3ae1-2e54-48e8-b387-81e6e94b36cb"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:37] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"23c32ab8-b0d9-498e-8f20-ccfd59ac5e50","trace_id":"02ba8e4b-992d-4833-af01-cb324ee2ee3a"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:42] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:43] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"929e5f37-c1d8-4b69-83ba-5927d55b34f3","trace_id":"45e488ca-3233-47f0-b9d0-6fd17d893c3e"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:40:47] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:02] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6340348b-99f2-4faf-a141-f083a32325cd","trace_id":"2f4b7884-1503-4fd4-9c6b-327e7f0191fd"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9eae3c8c-d9c0-401a-9460-8799aaaf4448","trace_id":"a0ea2929-2179-4846-ba27-04c4ff9e776f"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"131b5e58-5016-4b93-8e6e-b74ad6e18386","trace_id":"a95cdcf9-cdbb-4395-83d5-feceb6c4723b"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring start {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:08] local.NOTICE: Monitoring end {"correlation_id":"4a8077b3-d474-4c53-a31a-5392401b03ef","trace_id":"532f3f03-fef6-4c69-85e3-388a734c12cc"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"99c4f411-1e07-4c3a-8019-6c9711a94694","trace_id":"97a24b93-205b-48be-87d2-6aceee83a927"}
[2026-05-07 11:41:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:11] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a0712d9-237d-4091-8cd9-146358d416f7","trace_id":"e892534a-c249-4710-9ed0-a638b5ef3e07"}
[2026-05-07 11:41:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98","trace_id":"c507dc76-29df-47df-acdc-bf7955175da4"}
[2026-05-07 11:41:13] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"1d5d0419-1ad8-4683-ba83-c0e2cd705d98",...
|
2821
|
NULL
|
NULL
|
NULL
|
|
2895
|
115
|
10
|
2026-05-07T11:47:23.443094+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154443443_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring start {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring end {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:24Z\",\"trace_id\":\"0d722c42-2bad-4b23-9e17-4c0afcec2700\",\"correlation_id\":\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:25Z\",\"trace_id\":\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\",\"correlation_id\":\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:26Z\",\"trace_id\":\"875d8d0d-a458-41a1-bc2f-d23391372b00\",\"correlation_id\":\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\",\"correlation_id\":\"3f277b1c-5644-4a99-94b5-86e8b358be01\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"757e60d3-7ca6-4c47-8604-489ce7ce3000\",\"correlation_id\":\"88706613-2578-4e9e-b2ff-9998127bbeba\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring start {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring end {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:24Z\\\",\\\"trace_id\\\":\\\"0d722c42-2bad-4b23-9e17-4c0afcec2700\\\",\\\"correlation_id\\\":\\\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:25Z\\\",\\\"trace_id\\\":\\\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\\\",\\\"correlation_id\\\":\\\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:26Z\\\",\\\"trace_id\\\":\\\"875d8d0d-a458-41a1-bc2f-d23391372b00\\\",\\\"correlation_id\\\":\\\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\\\",\\\"correlation_id\\\":\\\"3f277b1c-5644-4a99-94b5-86e8b358be01\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"757e60d3-7ca6-4c47-8604-489ce7ce3000\\\",\\\"correlation_id\\\":\\\"88706613-2578-4e9e-b2ff-9998127bbeba\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring start {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring end {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24642480,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":31.66,\"usage\":24870520,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24909168,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":42.58,\"usage\":24846616,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24885200,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778152460,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1331.48,\"usage\":24922960,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25125968,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":30.12,\"usage\":25133152,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25172056,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:28] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":1358.46,\"usage\":25265680,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25244320,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":35.28,\"usage\":25247400,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25285216,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":46.38,\"usage\":25206440,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25244920,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":2395.35,\"usage\":25423552,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring start {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring end {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:40\",\"to\":\"11:45\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:35\",\"to\":\"01:40\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:47:30.716789Z\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812300,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812301,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812302,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812303,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812304,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812305,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.ALERT: [SyncActivity] Failed {\"import_id\":812300,\"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\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812301,\"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\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812302,\"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\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.ALERT: [SyncActivity] Failed {\"import_id\":812303,\"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\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.ALERT: [SyncActivity] Failed {\"import_id\":812304,\"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\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Start {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:29:00\",\"to\":\"2026-05-07 11:45:00\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] End {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Memory usage {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27616936,\"memory_real_usage\":67108864,\"pid\":20660} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring start {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring end {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] 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\":180.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:46] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":22517,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e9814b84-7390-455e-ab81-681622cd75f9\",\"trace_id\":\"d9e67898-b23a-476b-a232-9793c0f20981\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23195336,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":52.2,\"usage\":23769616,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":543.06} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":574.8,\"usage\":24159496,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24289904,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24328272,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.2,\"usage\":24574864,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring start {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring end {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:24Z\\\",\\\"trace_id\\\":\\\"0d722c42-2bad-4b23-9e17-4c0afcec2700\\\",\\\"correlation_id\\\":\\\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:25Z\\\",\\\"trace_id\\\":\\\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\\\",\\\"correlation_id\\\":\\\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:26Z\\\",\\\"trace_id\\\":\\\"875d8d0d-a458-41a1-bc2f-d23391372b00\\\",\\\"correlation_id\\\":\\\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\\\",\\\"correlation_id\\\":\\\"3f277b1c-5644-4a99-94b5-86e8b358be01\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"757e60d3-7ca6-4c47-8604-489ce7ce3000\\\",\\\"correlation_id\\\":\\\"88706613-2578-4e9e-b2ff-9998127bbeba\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring start {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring end {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24642480,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":31.66,\"usage\":24870520,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24909168,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":42.58,\"usage\":24846616,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24885200,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778152460,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1331.48,\"usage\":24922960,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25125968,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":30.12,\"usage\":25133152,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25172056,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:28] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":1358.46,\"usage\":25265680,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25244320,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":35.28,\"usage\":25247400,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25285216,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":46.38,\"usage\":25206440,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25244920,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":2395.35,\"usage\":25423552,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring start {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring end {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:40\",\"to\":\"11:45\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:35\",\"to\":\"01:40\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:47:30.716789Z\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812300,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812301,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812302,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812303,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812304,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812305,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.ALERT: [SyncActivity] Failed {\"import_id\":812300,\"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\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812301,\"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\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812302,\"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\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.ALERT: [SyncActivity] Failed {\"import_id\":812303,\"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\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.ALERT: [SyncActivity] Failed {\"import_id\":812304,\"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\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Start {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:29:00\",\"to\":\"2026-05-07 11:45:00\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] End {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Memory usage {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27616936,\"memory_real_usage\":67108864,\"pid\":20660} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring start {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring end {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] 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\":180.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:46] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":22517,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e9814b84-7390-455e-ab81-681622cd75f9\",\"trace_id\":\"d9e67898-b23a-476b-a232-9793c0f20981\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23195336,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":52.2,\"usage\":23769616,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":543.06} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":574.8,\"usage\":24159496,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24289904,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24328272,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.2,\"usage\":24574864,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$deal ' . PHP_EOL . print_r($deal, true));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$deal ' . PHP_EOL . print_r($deal, true));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1463376968512889222
|
8335239719913957565
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring start {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring end {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:24Z\",\"trace_id\":\"0d722c42-2bad-4b23-9e17-4c0afcec2700\",\"correlation_id\":\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:25Z\",\"trace_id\":\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\",\"correlation_id\":\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:26Z\",\"trace_id\":\"875d8d0d-a458-41a1-bc2f-d23391372b00\",\"correlation_id\":\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\",\"correlation_id\":\"3f277b1c-5644-4a99-94b5-86e8b358be01\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"757e60d3-7ca6-4c47-8604-489ce7ce3000\",\"correlation_id\":\"88706613-2578-4e9e-b2ff-9998127bbeba\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
2896
|
116
|
13
|
2026-05-07T11:47:24.385729+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154444385_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring start {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring end {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:24Z\",\"trace_id\":\"0d722c42-2bad-4b23-9e17-4c0afcec2700\",\"correlation_id\":\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:25Z\",\"trace_id\":\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\",\"correlation_id\":\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:26Z\",\"trace_id\":\"875d8d0d-a458-41a1-bc2f-d23391372b00\",\"correlation_id\":\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\",\"correlation_id\":\"3f277b1c-5644-4a99-94b5-86e8b358be01\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"757e60d3-7ca6-4c47-8604-489ce7ce3000\",\"correlation_id\":\"88706613-2578-4e9e-b2ff-9998127bbeba\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring start {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring end {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:24Z\\\",\\\"trace_id\\\":\\\"0d722c42-2bad-4b23-9e17-4c0afcec2700\\\",\\\"correlation_id\\\":\\\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:25Z\\\",\\\"trace_id\\\":\\\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\\\",\\\"correlation_id\\\":\\\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:26Z\\\",\\\"trace_id\\\":\\\"875d8d0d-a458-41a1-bc2f-d23391372b00\\\",\\\"correlation_id\\\":\\\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\\\",\\\"correlation_id\\\":\\\"3f277b1c-5644-4a99-94b5-86e8b358be01\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"757e60d3-7ca6-4c47-8604-489ce7ce3000\\\",\\\"correlation_id\\\":\\\"88706613-2578-4e9e-b2ff-9998127bbeba\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring start {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring end {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24642480,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":31.66,\"usage\":24870520,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24909168,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":42.58,\"usage\":24846616,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24885200,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778152460,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1331.48,\"usage\":24922960,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25125968,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":30.12,\"usage\":25133152,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25172056,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:28] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":1358.46,\"usage\":25265680,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25244320,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":35.28,\"usage\":25247400,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25285216,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":46.38,\"usage\":25206440,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25244920,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":2395.35,\"usage\":25423552,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring start {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring end {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:40\",\"to\":\"11:45\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:35\",\"to\":\"01:40\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:47:30.716789Z\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812300,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812301,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812302,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812303,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812304,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812305,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.ALERT: [SyncActivity] Failed {\"import_id\":812300,\"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\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812301,\"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\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812302,\"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\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.ALERT: [SyncActivity] Failed {\"import_id\":812303,\"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\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.ALERT: [SyncActivity] Failed {\"import_id\":812304,\"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\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Start {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:29:00\",\"to\":\"2026-05-07 11:45:00\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] End {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Memory usage {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27616936,\"memory_real_usage\":67108864,\"pid\":20660} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring start {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring end {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] 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\":180.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:46] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":22517,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e9814b84-7390-455e-ab81-681622cd75f9\",\"trace_id\":\"d9e67898-b23a-476b-a232-9793c0f20981\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23195336,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":52.2,\"usage\":23769616,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":543.06} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":574.8,\"usage\":24159496,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24289904,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24328272,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.2,\"usage\":24574864,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9a7036b8-f173-4885-aa58-abbe1021de5d\",\"trace_id\":\"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"68167dac-c9c7-4d64-8e4e-f854163b36ed\",\"trace_id\":\"8ad55a6a-dce9-4800-a596-c582d9767faf\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring start {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:14] local.NOTICE: Monitoring end {\"correlation_id\":\"80becac7-8592-4608-a4d9-f4bd688c7521\",\"trace_id\":\"457acf66-f5cd-4589-a654-42b9bd66b02e\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"51eace06-5f17-4183-8db4-dd11335594fc\",\"trace_id\":\"2394d02b-7c54-4ebc-aa19-765f2bdec794\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bcdcf507-004c-462a-8880-98a0690340a2\",\"trace_id\":\"08c456b6-94f6-46b6-b436-8764cddd1947\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3385a1c2-738f-46a7-a6aa-051c06e24f04\",\"trace_id\":\"13f4e24c-7616-44a6-93be-8101fe35cff0\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:24Z\\\",\\\"trace_id\\\":\\\"0d722c42-2bad-4b23-9e17-4c0afcec2700\\\",\\\"correlation_id\\\":\\\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:25Z\\\",\\\"trace_id\\\":\\\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\\\",\\\"correlation_id\\\":\\\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:26Z\\\",\\\"trace_id\\\":\\\"875d8d0d-a458-41a1-bc2f-d23391372b00\\\",\\\"correlation_id\\\":\\\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\\\",\\\"correlation_id\\\":\\\"3f277b1c-5644-4a99-94b5-86e8b358be01\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:43:27Z\\\",\\\"trace_id\\\":\\\"757e60d3-7ca6-4c47-8604-489ce7ce3000\\\",\\\"correlation_id\\\":\\\"88706613-2578-4e9e-b2ff-9998127bbeba\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7fe44a33-07fa-4768-a9fa-b61147c22bb1\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:43:29] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b8aa2ecf-137e-4f45-9bc5-baae095ae86d\",\"trace_id\":\"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92ef6fae-ffdc-424f-b611-70af91a8697b\",\"trace_id\":\"dc588c04-dd98-4394-a972-86b4457817a4\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b120945f-2b0a-40e4-9a8a-c98ecdd3d7c4\",\"trace_id\":\"99e053e7-fbf1-448d-a133-fe17913730da\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring start {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:10] local.NOTICE: Monitoring end {\"correlation_id\":\"5daa9c3e-7cd5-4458-a9f3-cd7f4c2c0f24\",\"trace_id\":\"238dac42-55fd-4c6b-bba4-aa3113f4d647\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d0fb6b00-45e0-4f86-92de-d2e0685f8c55\",\"trace_id\":\"9677d1d3-e586-4c47-85f5-6a8ded30e590\"}\n[2026-05-07 11:44:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a17ef5b3-86ae-49b3-af6a-94863b7ff21b\",\"trace_id\":\"d4716255-db76-4a91-a7e9-f654954d8ede\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:42:00, 2026-05-07 11:44:00] {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"19cd0e20-4974-4996-90d0-67f642517b4a\",\"trace_id\":\"5503a6a6-777e-4da9-8eb3-688cc2134b84\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ce815e5-0508-4d6c-904d-0f66a362485a\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"usage\":24642480,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"641f1acb-16b8-42d1-8726-df52979dad0e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1500,\"sociable_id\":143,\"provider_user_id\":\"0052g000003frelAAA\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2026-02-06 08:39:03\",\"updated_at\":\"2026-04-28 06:31:37\"}}} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":143,\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:19] local.INFO: [SyncObjects] Sync finished {\"team\":\"6473c918-d8db-4ded-a52b-4febfd7b7c02\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":31.66,\"usage\":24870520,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"8ce187cd-9060-4e5b-b5fd-30c923e81507\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"usage\":24909168,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:21] local.INFO: [SyncObjects] Sync finished {\"team\":\"51467630-d89d-480b-be20-933e64a042f7\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":42.58,\"usage\":24846616,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"123a3e02-a9df-4886-b8ad-f570ea585872\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"usage\":24885200,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"copper\",\"crm_owner\":333,\"team_id\":27} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:24] local.NOTICE: Leads unavailable {\"method\":\"POST\",\"endpoint\":\"leads/search\",\"options\":[],\"body\":{\"minimum_modified_date\":1778152460,\"sort_by\":\"date_modified\",\"page_number\":1},\"status_code\":403,\"error\":\"{\\\"success\\\":false,\\\"status\\\":403,\\\"message\\\":\\\"Feature not enabled\\\"}\"} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"396ed57c-e3c4-49be-8290-37c32955f7c7\",\"provider\":\"copper\",\"status\":\"completed\",\"duration_ms\":1331.48,\"usage\":24922960,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"ef5841a7-e386-46cf-b7c8-0aeff9e07a2e\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"usage\":25125968,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":28} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:25] local.INFO: [SyncObjects] Sync finished {\"team\":\"fda3cbdf-1117-4ba5-86f8-775f548b3a28\",\"provider\":\"pipedrive\",\"status\":\"disconnected\",\"duration_ms\":30.12,\"usage\":25133152,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"9862918b-f2f0-481c-897f-80c28629b9ee\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"usage\":25172056,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1219,\"provider\":\"close\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"close\",\"crm_owner\":257,\"team_id\":31} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:28] local.INFO: [SyncObjects] Sync finished {\"team\":\"3ff5a02a-86fb-4357-b1d6-a04e26c38602\",\"provider\":\"close\",\"status\":\"completed\",\"duration_ms\":1358.46,\"usage\":25265680,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"5acc4ea4-02dc-478e-be32-829053e09eeb\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"usage\":25244320,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.WARNING: [Bullhorn] Account not connected for user {\"userId\":\"941d12a6-e84f-4c3a-a4c8-2ef433792095\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":348,\"sociable_id\":121,\"provider_user_id\":null,\"expires\":1733727508,\"refresh_token_expires\":null,\"provider\":\"bullhorn\",\"state\":\"full-refresh\",\"auth_scope\":null,\"retry_after\":null,\"created_at\":\"2021-04-06 11:07:26\",\"updated_at\":\"2024-12-09 15:10:40\"}}} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"bullhorn\",\"crm_owner\":121,\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"bullhorn\",\"team_id\":36} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:29] local.INFO: [SyncObjects] Sync finished {\"team\":\"1640a0ac-19da-4c3b-90f7-87525f07a6d2\",\"provider\":\"bullhorn\",\"status\":\"disconnected\",\"duration_ms\":35.28,\"usage\":25247400,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Bullhorn account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6b68a06-8f1a-47ab-ad88-10ee168f8c53\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"usage\":25285216,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"ed89227b-e364-4dfb-b4bf-343f154bf21e\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1360,\"sociable_id\":245,\"provider_user_id\":\"0052g000003frZNAAY\",\"expires\":null,\"refresh_token_expires\":null,\"provider\":\"salesforce\",\"state\":\"full-refresh\",\"auth_scope\":\"refresh_token web api\",\"retry_after\":null,\"created_at\":\"2024-09-02 06:11:55\",\"updated_at\":\"2024-12-11 08:50:23\"}}} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":245,\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":59} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:31] local.INFO: [SyncObjects] Sync finished {\"team\":\"0c33bf2d-1c77-4200-8ed6-6147ad444c30\",\"provider\":\"salesforce\",\"status\":\"disconnected\",\"duration_ms\":46.38,\"usage\":25206440,\"real_usage\":65011712,\"pid\":20655,\"reason\":\"Your Salesforce account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"179e13d7-69aa-4ec4-beeb-851ac7d6891b\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [SyncObjects] Before memory usage: {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"usage\":25244920,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-deals/run\",\"full_target\":\"connections/zohocrm/actions/query-deals/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing opportunities finished successfully {\"parameters\":{\"since\":\"2026-05-07 11:14:30\",\"strategy\":\"lastModified\"},\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Syncing accounts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:34] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-companies/run\",\"full_target\":\"connections/zohocrm/actions/query-companies/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing accounts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/query-contacts/run\",\"full_target\":\"connections/zohocrm/actions/query-contacts/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing contacts finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Syncing leads {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"crm_profile_id\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:35] local.INFO: [integration-app] Request {\"request\":\"POST connections/zohocrm/actions/get-converted-leads/run\",\"full_target\":\"connections/zohocrm/actions/get-converted-leads/run\"} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [integration-app] Syncing leads finished successfully {\"since\":\"2026-05-07 11:14:30\",\"to\":null,\"team_id\":3143} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:44:36] local.INFO: [SyncObjects] Sync finished {\"team\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\"provider\":\"integration-app\",\"status\":\"completed\",\"duration_ms\":2395.35,\"usage\":25423552,\"real_usage\":65011712,\"pid\":20655} {\"correlation_id\":\"10dd9cfd-7324-44bd-a52d-d22487564b77\",\"trace_id\":\"07303793-85cf-433d-942b-4394060cf324\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7e24fe55-caa6-407d-82ce-0561792acbdc\",\"trace_id\":\"4fb6dd00-9faf-41b6-aa3f-80c0efa1e197\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e1306c39-efea-440b-b314-543011ee27b6\",\"trace_id\":\"6b76bcfc-89dd-4d96-87cb-890049a19b09\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring start {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:09] local.NOTICE: Monitoring end {\"correlation_id\":\"67a85114-2714-4576-97d8-1907818bda22\",\"trace_id\":\"b78253d1-f41a-4966-bb9a-7361e03d3746\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64ba8891-e8dd-4a7f-a8ca-a18221353174\",\"trace_id\":\"aed2eb11-6434-4691-9080-866f93027f34\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"483f8216-665e-41d8-a5be-6ebe668c4846\",\"trace_id\":\"5f5c7112-92c5-4196-9208-36eac61c0347\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c9b4b95f-1976-48da-b0e5-398872ea439d\",\"trace_id\":\"130fb2d1-4a68-476a-86d2-03963dcba7e1\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9f695dd9-2aa3-42ba-97dd-86428a3ef250\",\"trace_id\":\"d02843f6-01ee-432c-a569-6cfaebe8a2a2\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f43aec6a-eb30-4dca-ad72-b46158a501bd\",\"trace_id\":\"4c52905e-5a75-4cad-a70a-1c686450ed68\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:35:00, 2026-05-07 11:40:00] {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"393047ec-70bd-484a-a742-5381460b53b6\",\"trace_id\":\"e6a5377c-3249-4c9c-b88e-85462c37eaf5\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:40\",\"to\":\"11:45\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:35\",\"to\":\"01:40\"} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aa49b99c-96c5-4db1-b969-f2bf7693db6d\",\"trace_id\":\"ea73a0f9-6554-4319-805c-a69e638d73fa\"}\n[2026-05-07 11:45:25] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:25] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.ERROR: Failed to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\",\"reason\":\"missing or invalid refresh token\",\"previous\":\"\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] 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\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:26] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"cd5030c9-6eb5-4796-858f-4105456fb890\",\"trace_id\":\"a7fac0d7-ba3e-46b9-b8e8-e0b395814a8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"611dfed5-0316-4e2e-ad6e-08548edff434\",\"trace_id\":\"5b16c3de-eaaf-470f-a752-6ccbc072f8f0\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:47:30.716789Z\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:30] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:32] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812300,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812301,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812302,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812303,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812304,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Dispatching activity sync job {\"import_id\":812305,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"be438e0a-0920-4b1c-8be9-2e6409c78089\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.ALERT: [SyncActivity] Failed {\"import_id\":812300,\"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\":\"94f43948-efab-4348-a7aa-d916d14625ff\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812301,\"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\":\"39398c8e-5ffd-46df-8750-be9eb96b9ec2\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.ALERT: [SyncActivity] Failed {\"import_id\":812302,\"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\":\"1eb83c9f-776d-4cf3-a719-45543518a90c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:36] local.ALERT: [SyncActivity] Failed {\"import_id\":812303,\"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\":\"fe4e3641-7344-4ac5-a8b9-c4d8e1e6ed33\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.ALERT: [SyncActivity] Failed {\"import_id\":812304,\"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\":\"91d446c2-f854-4ac8-8fc0-f8932597439c\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e63f205-1b1a-431a-9f1d-7ae1efb14419\",\"trace_id\":\"e2970090-af41-43e6-9542-aebbfb20f3a3\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:37] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Start {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:29:00\",\"to\":\"2026-05-07 11:45:00\"} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] End {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:38] local.INFO: [SyncActivity] Memory usage {\"import_id\":812305,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27616936,\"memory_real_usage\":67108864,\"pid\":20660} {\"correlation_id\":\"e379052f-61fb-4150-b0aa-39e5b4dabc97\",\"trace_id\":\"95199ed6-31a8-4d2e-9f76-ba952c48bd22\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1c1ffb0f-f1db-48be-ad34-40774bf8742a\",\"trace_id\":\"ab43b207-e8e0-4459-8fce-84ebca72b674\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fba9f46a-d55a-4db0-a2b1-f21b1787101a\",\"trace_id\":\"f4179c79-8eb7-4616-bcb7-27ff3881a101\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:45:56] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f2f2939-3a57-4245-a9d4-53d4c6efeb82\",\"trace_id\":\"0c0960f8-3ab2-48c7-b76a-d5e6ff94cfe4\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14985874-32ec-4a59-9e6f-3b3f5ffaf5ee\",\"trace_id\":\"50bd028a-bf9d-4460-a916-28dadc422219\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring start {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:15] local.NOTICE: Monitoring end {\"correlation_id\":\"4cb3d5b2-9f9b-41ac-8497-56907fb4b0bc\",\"trace_id\":\"12d8f69f-d63d-4d3e-9366-e617ee3c33a3\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"23d9f59d-dbac-4db0-b790-a82104de52ee\",\"trace_id\":\"103ec381-d8b9-4182-b589-7747b21ff5a8\"}\n[2026-05-07 11:46:24] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:24] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43631bca-1043-435b-8eab-af864f200bb0\",\"trace_id\":\"d00691e5-5c4f-4056-8332-f8b08a81eaa0\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] 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\":180.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:27] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ab855211-5a72-4e2c-bcc1-ff51511abd1d\",\"trace_id\":\"b3d9d9ea-46a2-4f78-b941-4f5480c5be8c\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:44:00, 2026-05-07 11:46:00] {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cf4a2dfc-1d5d-41c5-a2ad-8b0157710e20\",\"trace_id\":\"cfe42c1c-6b41-481d-9da6-9e23ab58c4ec\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:33] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"170f7bc2-a2f1-41cb-8ab1-ac4d17789639\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:34] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:notify-not-logged\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d52dd333-611f-422b-8fa3-78b941d4e0f2\",\"trace_id\":\"0eb17a58-486f-4b49-abc0-62ae63adf651\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] STARTING Inbox Sync {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: [EmailSchedule] FINISHED Inbox Sync {\"host\":\"docker_lamp_1\",\"events\":2} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9901deb2-cfa7-4611-938a-0e3057929cad\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:46] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":22517,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"e9814b84-7390-455e-ab81-681622cd75f9\",\"trace_id\":\"d9e67898-b23a-476b-a232-9793c0f20981\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":23195336,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":52.2,\"usage\":23769616,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"f6cb0c9b-1293-447d-aa7d-4298a7c37970\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23811032,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 59 due to unauthorized access to the mailbox {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":59} {\"correlation_id\":\"287aa80a-8cfc-452a-9563-801d25ceef67\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync start {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Inbox service] Skipping METADATA SYNC for inbox 212 due to unauthorized access to the mailbox {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] local.INFO: [Sync Mailbox] Sync complete {\"inbox_id\":212} {\"correlation_id\":\"f7a4eff4-5f35-4afb-abbc-faac838afb96\",\"trace_id\":\"00ece62e-4e3c-42c5-b8d8-6742d7d70ac6\"}\n[2026-05-07 11:46:47] 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.53,\"average_seconds_per_request\":0.53} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":543.06} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":574.8,\"usage\":24159496,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"47a5cce2-d22f-41bd-95e9-71049ff7f2fc\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24137464,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":13.37,\"usage\":24289904,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"15225442-d535-487f-a734-ef67f96121bf\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24328272,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:46:47] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.2,\"usage\":24574864,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"fbd3850b-5957-43c3-b0c9-45ced982236c\",\"trace_id\":\"78e86740-75f8-4c47-a045-d25caf874913\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"854c6366-cd62-4283-9609-199b6f377a29\",\"trace_id\":\"1daf0077-3b93-4d58-bfe9-d5f56eb6e086\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"64910477-bd91-44e6-a3e7-7a2c2c67b979\",\"trace_id\":\"6cd68389-f85e-4790-97dc-34acffad27a2\"}\n[2026-05-07 11:47:09] local.NOTICE: Monitoring start {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:10] local.NOTICE: Monitoring end {\"correlation_id\":\"8b020839-fe11-4f2c-ad44-32d5e8af6e74\",\"trace_id\":\"cfe70c3d-8b9c-4b63-935d-329f262020bb\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d230d211-a209-4535-92de-fab7e74e3279\",\"trace_id\":\"503411cc-4972-4216-bae9-7eeb261705dc\"}\n[2026-05-07 11:47:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fbe2eb8-233c-4bcc-99a2-fcd7ea9fa029\",\"trace_id\":\"61786c48-8888-429b-943c-48093c311daf\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}\n[2026-05-07 11:47:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c8087cc9-7544-4005-8ce1-38d29c2e065e\",\"trace_id\":\"402cb9be-9be2-4f81-861d-e6a4ca701745\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$deal ' . PHP_EOL . print_r($deal, true));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$deal ' . PHP_EOL . print_r($deal, true));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1463376968512889222
|
8335239719913957565
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9a7036b8-f173-4885-aa58-abbe1021de5d","trace_id":"e95a6769-e58d-4375-bfcb-90a2c4cdd2bb"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"68167dac-c9c7-4d64-8e4e-f854163b36ed","trace_id":"8ad55a6a-dce9-4800-a596-c582d9767faf"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring start {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:14] local.NOTICE: Monitoring end {"correlation_id":"80becac7-8592-4608-a4d9-f4bd688c7521","trace_id":"457acf66-f5cd-4589-a654-42b9bd66b02e"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"51eace06-5f17-4183-8db4-dd11335594fc","trace_id":"2394d02b-7c54-4ebc-aa19-765f2bdec794"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bcdcf507-004c-462a-8880-98a0690340a2","trace_id":"08c456b6-94f6-46b6-b436-8764cddd1947"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.NOTICE: Calendar sync start {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3385a1c2-738f-46a7-a6aa-051c06e24f04","trace_id":"13f4e24c-7616-44a6-93be-8101fe35cff0"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:24] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 0d722c42-2bad-4b23-9e17-4c0afcec2700 Correlation ID: 2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4 Timestamp: 2026-05-07 11:43:24Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:24Z\",\"trace_id\":\"0d722c42-2bad-4b23-9e17-4c0afcec2700\",\"correlation_id\":\"2cd7d412-c5dd-4c4f-b0be-1eabc81fdcc4\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: f6df5266-90e7-48e3-b50b-d8db0f0b1900 Correlation ID: 9fb2907c-b5aa-4288-b342-8f7c6d62dc72 Timestamp: 2026-05-07 11:43:25Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:25Z\",\"trace_id\":\"f6df5266-90e7-48e3-b50b-d8db0f0b1900\",\"correlation_id\":\"9fb2907c-b5aa-4288-b342-8f7c6d62dc72\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:25] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"ca1b20a7-a241-4aeb-a7e5-24d78edaa6da","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 875d8d0d-a458-41a1-bc2f-d23391372b00 Correlation ID: f5cbaedc-2e03-40b4-9af9-ce5b1861840a Timestamp: 2026-05-07 11:43:26Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:26Z\",\"trace_id\":\"875d8d0d-a458-41a1-bc2f-d23391372b00\",\"correlation_id\":\"f5cbaedc-2e03-40b4-9af9-ce5b1861840a\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:26] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 27de6a67-e45b-46a9-8e86-988dfe2f1e00 Correlation ID: 3f277b1c-5644-4a99-94b5-86e8b358be01 Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"27de6a67-e45b-46a9-8e86-988dfe2f1e00\",\"correlation_id\":\"3f277b1c-5644-4a99-94b5-86e8b358be01\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 757e60d3-7ca6-4c47-8604-489ce7ce3000 Correlation ID: 88706613-2578-4e9e-b2ff-9998127bbeba Timestamp: 2026-05-07 11:43:27Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:43:27Z\",\"trace_id\":\"757e60d3-7ca6-4c47-8604-489ce7ce3000\",\"correlation_id\":\"88706613-2578-4e9e-b2ff-9998127bbeba\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:27] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7fe44a33-07fa-4768-a9fa-b61147c22bb1","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.INFO: [Calendar] Processing sync {"calendarId":"2676cb6d-f86c-427e-bf78-591e388e3c1e","from":null,"to":null,"delta":"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=","last_sync":"2026-01-19 07:48:40","dateMode":"daily"} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:28] local.WARNING: [Pipedrive] Account not connected for user {"userId":"e6538737-e7b4-455f-a37a-3e79b665a220","account":{"Jiminny\\Models\\SocialAccount":{"id":1116,"sociable_id":241,"provider_user_id":"19555731","expires":1775683749,"refresh_token_expires":null,"provider":"pipedrive","state":"full-refresh","auth_scope":"base,deals:full,activities:full,contacts:full,search:read","retry_after":null,"created_at":"2023-09-08 09:44:29","updated_at":"2026-04-08 22:58:34"}}} {"correlation_id":"3dc85ae8-3ab1-4ff4-a4d1-d1cad3c68969","trace_id":"d87e8ba2-566c-4b88-8eaf-d5c7c2eef952"}
[2026-05-07 11:43:29] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"pipedrive","crm_owner":...
|
2894
|
NULL
|
NULL
|
NULL
|
|
3001
|
119
|
9
|
2026-05-07T11:56:14.717145+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154974717_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring start {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24613944,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":498.68} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":525.01,"usage":24737176,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24715104,"real_usage":65011712,"pid":22511} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":15.95,"usage":24852400,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24890840,"real_usage":65011712,"pid":22511} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] 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":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":14.79,"usage":24852496,"real_usage":65011712,"pid":22511,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24890864,"real_usage":65011712,"pid":22511} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":12.67,"usage":24853640,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] 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":212.6,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:52:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring start {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring end {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"42da0e1d-1e80-4c61-8faa-6f317194468c","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring start {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring end {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring start {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring end {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"0aaa4815-3c2f-4bb5-8419-1806dfb67969","trace_id":"d9f895a3-4d96-4e9e-9257-917f0a137c9a"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring start {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring end {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:50","to":"11:55"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:45","to":"01:50"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:57:52.578394Z"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5365ec4...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring start {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring end {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24613944,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":498.68} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":525.01,\"usage\":24737176,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24715104,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.95,\"usage\":24852400,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24890840,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] 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\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.79,\"usage\":24852496,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24890864,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.67,\"usage\":24853640,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] 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\":212.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:52:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring start {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring end {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"42da0e1d-1e80-4c61-8faa-6f317194468c\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring start {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring end {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring start {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring end {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"0aaa4815-3c2f-4bb5-8419-1806dfb67969\",\"trace_id\":\"d9f895a3-4d96-4e9e-9257-917f0a137c9a\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring start {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring end {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:50\",\"to\":\"11:55\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:45\",\"to\":\"01:50\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:57:52.578394Z\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}\n[2026-05-07 11:56:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring start {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring end {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24613944,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":498.68} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":525.01,\"usage\":24737176,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24715104,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.95,\"usage\":24852400,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24890840,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] 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\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.79,\"usage\":24852496,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24890864,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.67,\"usage\":24853640,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] 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\":212.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:52:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring start {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring end {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"42da0e1d-1e80-4c61-8faa-6f317194468c\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring start {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring end {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring start {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring end {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"0aaa4815-3c2f-4bb5-8419-1806dfb67969\",\"trace_id\":\"d9f895a3-4d96-4e9e-9257-917f0a137c9a\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring start {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring end {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:50\",\"to\":\"11:55\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:45\",\"to\":\"01:50\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:57:52.578394Z\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}\n[2026-05-07 11:56:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"}]...
|
4791663734379304107
|
6794225151195585597
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring start {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24613944,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":498.68} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":525.01,"usage":24737176,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24715104,"real_usage":65011712,"pid":22511} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":15.95,"usage":24852400,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24890840,"real_usage":65011712,"pid":22511} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] 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":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":14.79,"usage":24852496,"real_usage":65011712,"pid":22511,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24890864,"real_usage":65011712,"pid":22511} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":12.67,"usage":24853640,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] 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":212.6,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:52:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring start {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring end {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"42da0e1d-1e80-4c61-8faa-6f317194468c","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring start {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring end {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring start {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring end {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"0aaa4815-3c2f-4bb5-8419-1806dfb67969","trace_id":"d9f895a3-4d96-4e9e-9257-917f0a137c9a"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring start {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring end {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:50","to":"11:55"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:45","to":"01:50"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:57:52.578394Z"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5365ec4...
|
2999
|
NULL
|
NULL
|
NULL
|
|
3002
|
120
|
9
|
2026-05-07T11:56:14.717159+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154974717_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring start {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24613944,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":498.68} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":525.01,"usage":24737176,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24715104,"real_usage":65011712,"pid":22511} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":15.95,"usage":24852400,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24890840,"real_usage":65011712,"pid":22511} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] 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":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":14.79,"usage":24852496,"real_usage":65011712,"pid":22511,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24890864,"real_usage":65011712,"pid":22511} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":12.67,"usage":24853640,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] 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":212.6,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:52:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring start {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring end {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"42da0e1d-1e80-4c61-8faa-6f317194468c","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring start {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring end {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring start {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring end {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"0aaa4815-3c2f-4bb5-8419-1806dfb67969","trace_id":"d9f895a3-4d96-4e9e-9257-917f0a137c9a"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring start {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring end {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:50","to":"11:55"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:45","to":"01:50"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:57:52.578394Z"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5365ec4...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring start {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring end {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24613944,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":498.68} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":525.01,\"usage\":24737176,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24715104,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.95,\"usage\":24852400,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24890840,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] 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\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.79,\"usage\":24852496,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24890864,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.67,\"usage\":24853640,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] 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\":212.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:52:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring start {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring end {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"42da0e1d-1e80-4c61-8faa-6f317194468c\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring start {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring end {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring start {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring end {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"0aaa4815-3c2f-4bb5-8419-1806dfb67969\",\"trace_id\":\"d9f895a3-4d96-4e9e-9257-917f0a137c9a\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring start {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring end {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:50\",\"to\":\"11:55\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:45\",\"to\":\"01:50\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:57:52.578394Z\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}\n[2026-05-07 11:56:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}","depth":4,"bounds":{"left":0.38164893,"top":0.09736632,"width":0.30152926,"height":0.90263367},"on_screen":true,"value":"[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ec212da0-f35f-4e3a-ae85-825aec5b1026\",\"trace_id\":\"d9ef9e31-d20b-4762-b9b4-46c99818f38f\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43\",\"trace_id\":\"b1a09140-c467-4454-9c6a-2d565adf8ce0\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring start {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:14] local.NOTICE: Monitoring end {\"correlation_id\":\"21d5080e-49cd-4e3f-a58e-4992807c93fa\",\"trace_id\":\"01591060-61f2-47d3-987c-aec0560f8e37\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8f654752-d48d-4a32-999d-8bd28efddcf9\",\"trace_id\":\"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"330decfd-35d2-495c-8eb2-5ececd33f1e8\",\"trace_id\":\"e49010ea-67ce-43ae-be95-be5e1171e626\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:20] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24613944,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {\"team_id\":2,\"endpoint\":\"https://api.hubapi.com/crm/v3/objects/deals/search\",\"total_requests\":1,\"total_records_fetched\":0,\"total_elapsed_seconds\":0.49,\"average_seconds_per_request\":0.49} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":498.68} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":525.01,\"usage\":24737176,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"fac7406d-bc3b-44f5-87da-1ab6df99557a\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24715104,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":15.95,\"usage\":24852400,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"69feb173-b662-43b4-aacd-adac7a4f25cb\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24890840,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] 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\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.79,\"usage\":24852496,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"6c360acc-7250-4f6c-a0b5-a03dd9799929\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24890864,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":12.67,\"usage\":24853640,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"6f156469-7cc4-4c73-a79e-223113cfa123\",\"trace_id\":\"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] 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\":212.6,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"ee105ea6-0628-4ac3-ae3c-939cbe784738\",\"trace_id\":\"1c8a156a-284e-4ccb-891b-6a1c87433c2d\"}\n[2026-05-07 11:52:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d8330b0b-fac0-4fe2-b581-b14121300a15\",\"trace_id\":\"c703077c-8a78-4024-8fd7-e4ddd888f986\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb6890b4-7c66-4266-81cd-081d3dfaf7a4\",\"trace_id\":\"bbd69e40-4d1b-453d-8a95-1f170d187f13\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring start {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:11] local.NOTICE: Monitoring end {\"correlation_id\":\"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a\",\"trace_id\":\"1173de14-0b45-4267-af0d-7136d7895391\"}\n[2026-05-07 11:52:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b2abeea9-f990-46a7-9095-cc7a03aae744\",\"trace_id\":\"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"356b1f88-fe86-4ab0-a953-e55148fcfd79\",\"trace_id\":\"d90be2f1-a42f-4823-bbc6-4d8c311dce67\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82\",\"trace_id\":\"58d55302-c33c-4e41-9a3a-174873a5631b\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a5296c6a-2e4d-4016-a1cd-1d0912ee4967\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:22] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"42da0e1d-1e80-4c61-8faa-6f317194468c\",\"trace_id\":\"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:52:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"75f6cfe2-2da8-4601-83cc-1492921739ba\",\"trace_id\":\"8ed442d2-80f9-46e0-83e1-eee05d9def80\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36\",\"trace_id\":\"45d1d43d-26bc-4303-9284-2f2761f2ffa6\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6107a4fb-58d4-47c2-bd7b-aa45d15809b7\",\"trace_id\":\"ead3daa5-1a04-4426-b494-a04698910122\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring start {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:10] local.NOTICE: Monitoring end {\"correlation_id\":\"013f16e4-90da-44af-ba8e-a97394d1fe1d\",\"trace_id\":\"36c02262-8c06-4cb2-b83d-96f824a5eea7\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9e595119-8009-4248-b312-fad5898fbf50\",\"trace_id\":\"2cb53405-7649-45a3-9f19-228299e2ebd8\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"dd63a127-27a3-48a7-b196-4d89f82245e3\",\"trace_id\":\"37a6523e-8c20-4c33-b25c-73a041b6518f\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:53:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"97e378ae-00fe-4caf-9d96-512d6738199d\",\"trace_id\":\"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:06] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9b97f159-c98f-468b-bce1-42155c850af2\",\"trace_id\":\"c3100f57-cf45-4fec-a721-5388c21d963c\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"c7b31f35-28b4-4c53-b201-367590131f28\",\"trace_id\":\"08ec17f7-0cae-4298-b291-92ac6d940f37\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring start {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:09] local.NOTICE: Monitoring end {\"correlation_id\":\"084a9780-780d-44e9-9fef-7ac5a4352476\",\"trace_id\":\"453ffc13-99bc-4058-9fb4-4f795bab92a2\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1f59d7e9-2980-47eb-9126-1098563028c2\",\"trace_id\":\"e281d475-59d7-4c32-838b-a4865acbf965\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e65eab21-466d-4afd-8629-ddff22ad687d\",\"trace_id\":\"17630b3e-06cd-4fdc-a553-63852e83b1a4\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"917d8d38-ee97-4ab5-826a-478572509a29\",\"trace_id\":\"a96a742e-e6f8-401e-bac3-a2ca0407051e\"}\n[2026-05-07 11:54:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1496,\"provider\":\"aircall\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {\"team_id\":1,\"reason\":\"{\\\"message\\\":\\\"Forbidden\\\"}\"} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:aircall:check-and-renew\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"aec3f652-9ae3-4e70-b1b6-03c04ec350e9\",\"trace_id\":\"99da81e0-4b75-4244-9815-041a5b2e5b1d\"}\n[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {\"options\":{\"from\":null,\"to\":null,\"help\":false,\"silent\":false,\"quiet\":false,\"verbose\":false,\"version\":false,\"ansi\":null,\"no-interaction\":false,\"env\":null}} {\"correlation_id\":\"0aaa4815-3c2f-4bb5-8419-1806dfb67969\",\"trace_id\":\"d9f895a3-4d96-4e9e-9257-917f0a137c9a\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7\",\"trace_id\":\"6cc4951c-0566-4c82-816a-a69e6b8d576e\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d005add7-b27b-4ea1-ae8a-a787f14c5102\",\"trace_id\":\"5356663c-78d3-4c53-9fd9-5ee71d38185b\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring start {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:13] local.NOTICE: Monitoring end {\"correlation_id\":\"d43867d7-6e0b-45f3-a8fe-e9bfb99025db\",\"trace_id\":\"963ca688-ac6a-436f-8a97-7a70b7dba5da\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6\",\"trace_id\":\"cdf056fc-90c9-4305-a1d7-4650f40a96e3\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"079f9115-4f26-445b-8297-80cfbbd4f64a\",\"trace_id\":\"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6a5657d6-f93d-48a6-aea1-9176101a0d61\",\"trace_id\":\"41c9f0c1-8062-4cd6-a502-2a87b9c61c36\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"41c1717f-e9e6-4023-a013-6fb1949b8d35\",\"trace_id\":\"7da75940-641f-4e0e-a514-e66c49f40e13\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:31] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7f50e440-deab-474a-9de3-31bd4c2a8d49\",\"trace_id\":\"cc2f5e3b-a686-4e31-88c5-1636d3e359b2\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d\",\"trace_id\":\"bfbbf317-33b9-4b99-b839-62bed8c2ace9\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:50\",\"to\":\"11:55\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:45\",\"to\":\"01:50\"} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:39] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"eb62b20d-49ee-4dc6-a341-7838c53eee06\",\"trace_id\":\"0088a2fa-9e22-40ea-8903-8a5a2fbb627a\"}\n[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] 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\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"3aa13271-8a61-421d-a335-538915a1692b\",\"trace_id\":\"67dc3600-bfb4-49a7-b69a-aee31a99b5bf\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"171cb8dd-43fa-4dc9-b2d3-b476c048761f\",\"trace_id\":\"203bf386-8bee-4b26-a4f7-ee107fdb1ef3\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T11:57:52.578394Z\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"361f8b4a-3c67-4dd6-b412-8bb8bf68da66\",\"trace_id\":\"a39312b8-d5dd-4545-8c38-cc6f0691abca\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"5365ec40-1e98-40a1-9714-e15cc9d29a13\",\"trace_id\":\"1591592b-30c4-426e-83ba-1f5433d10801\"}\n[2026-05-07 11:56:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}\n[2026-05-07 11:56:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"6d3fa0b7-1c8c-4a3e-8ec4-32a073fb953e\",\"trace_id\":\"0316a4b0-f1ce-45f0-91b7-5fcf53c80755\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4791663734379304107
|
6794225151195585597
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026","trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b3fe4da8-30cb-4e4e-9c1b-fc2dd984fd43","trace_id":"b1a09140-c467-4454-9c6a-2d565adf8ce0"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring start {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:14] local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9","trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"330decfd-35d2-495c-8eb2-5ececd33f1e8","trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:20] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24613944,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"https://api.hubapi.com/crm/v3/objects/deals/search","total_requests":1,"total_records_fetched":0,"total_elapsed_seconds":0.49,"average_seconds_per_request":0.49} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":498.68} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":525.01,"usage":24737176,"real_usage":65011712,"pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24715104,"real_usage":65011712,"pid":22511} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":15.95,"usage":24852400,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"69feb173-b662-43b4-aacd-adac7a4f25cb","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24890840,"real_usage":65011712,"pid":22511} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] 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":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:21] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":109,"team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":29} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","provider":"hubspot","status":"disconnected","duration_ms":14.79,"usage":24852496,"real_usage":65011712,"pid":22511,"reason":"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect."} {"correlation_id":"6c360acc-7250-4f6c-a0b5-a03dd9799929","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Starting sync {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","usage":24890864,"real_usage":65011712,"pid":22511} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.WARNING: [HubSpot] Account not connected for user {"userId":"71e3aac5-fb66-47c5-a236-2d051ae3e319","account":null} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":256,"team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":49} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:22] local.INFO: [SyncHubspotObjects] Sync finished {"team":"c6b9d6b0-b48d-4832-a68c-a57d60651888","provider":"hubspot","status":"disconnected","duration_ms":12.67,"usage":24853640,"real_usage":65011712,"pid":22511,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"6f156469-7cc4-4c73-a79e-223113cfa123","trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {"empty_results":5,"max_empty_results":5} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] 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":212.6,"avg_download_ms":0.0,"avg_transform_ms":0.0,"avg_process_ms":0.0,"peak_memory_mb":99.73} {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:51:26] local.INFO: [HubSpot Journal Polling] Released polling lock {"correlation_id":"ee105ea6-0628-4ac3-ae3c-939cbe784738","trace_id":"1c8a156a-284e-4ccb-891b-6a1c87433c2d"}
[2026-05-07 11:52:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d8330b0b-fac0-4fe2-b581-b14121300a15","trace_id":"c703077c-8a78-4024-8fd7-e4ddd888f986"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb6890b4-7c66-4266-81cd-081d3dfaf7a4","trace_id":"bbd69e40-4d1b-453d-8a95-1f170d187f13"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring start {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:11] local.NOTICE: Monitoring end {"correlation_id":"3d3585ce-0f2b-49e4-93fd-10fd8fa6795a","trace_id":"1173de14-0b45-4267-af0d-7136d7895391"}
[2026-05-07 11:52:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b2abeea9-f990-46a7-9095-cc7a03aae744","trace_id":"357cb5b5-6e8a-4a11-b250-f0ad4bdc8fbf"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"356b1f88-fe86-4ab0-a953-e55148fcfd79","trace_id":"d90be2f1-a42f-4823-bbc6-4d8c311dce67"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:52:00] {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e7b9aa92-b84f-47e7-9df4-36eaffb4ac82","trace_id":"58d55302-c33c-4e41-9a3a-174873a5631b"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] STARTING batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: [EmailSchedule] FINISHED batch create {"host":"docker_lamp_1"} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:create","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a5296c6a-2e4d-4016-a1cd-1d0912ee4967","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:22] local.INFO: [Jiminny\Jobs\Mailbox\CreateBatches] processed 2 inboxes and created 0 batches {"userId":null,"batchSize":30,"maxBatches":1000} {"correlation_id":"42da0e1d-1e80-4c61-8faa-6f317194468c","trace_id":"cf2ecc6a-488e-4a38-bb3b-fa6e9f3c3e2c"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:52:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"75f6cfe2-2da8-4601-83cc-1492921739ba","trace_id":"8ed442d2-80f9-46e0-83e1-eee05d9def80"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"37ee5e23-87b1-4a59-bfd2-c13cd69e3b36","trace_id":"45d1d43d-26bc-4303-9284-2f2761f2ffa6"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6107a4fb-58d4-47c2-bd7b-aa45d15809b7","trace_id":"ead3daa5-1a04-4426-b494-a04698910122"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring start {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:10] local.NOTICE: Monitoring end {"correlation_id":"013f16e4-90da-44af-ba8e-a97394d1fe1d","trace_id":"36c02262-8c06-4cb2-b83d-96f824a5eea7"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9e595119-8009-4248-b312-fad5898fbf50","trace_id":"2cb53405-7649-45a3-9f19-228299e2ebd8"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:14] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"dd63a127-27a3-48a7-b196-4d89f82245e3","trace_id":"37a6523e-8c20-4c33-b25c-73a041b6518f"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:53:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"97e378ae-00fe-4caf-9d96-512d6738199d","trace_id":"48c66b4b-e94d-4ea6-ab36-0cfd8e6b1629"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:06] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9b97f159-c98f-468b-bce1-42155c850af2","trace_id":"c3100f57-cf45-4fec-a721-5388c21d963c"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"c7b31f35-28b4-4c53-b201-367590131f28","trace_id":"08ec17f7-0cae-4298-b291-92ac6d940f37"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring start {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:09] local.NOTICE: Monitoring end {"correlation_id":"084a9780-780d-44e9-9fef-7ac5a4352476","trace_id":"453ffc13-99bc-4058-9fb4-4f795bab92a2"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1f59d7e9-2980-47eb-9126-1098563028c2","trace_id":"e281d475-59d7-4c32-838b-a4865acbf965"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:16] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e65eab21-466d-4afd-8629-ddff22ad687d","trace_id":"17630b3e-06cd-4fdc-a553-63852e83b1a4"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:52:00, 2026-05-07 11:54:00] {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:18] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"917d8d38-ee97-4ab5-826a-478572509a29","trace_id":"a96a742e-e6f8-401e-bac3-a2ca0407051e"}
[2026-05-07 11:54:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1496,"provider":"aircall"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.ERROR: [Aircall] Re-activating webhooks failed {"team_id":1,"reason":"{\"message\":\"Forbidden\"}"} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:aircall:check-and-renew","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"aec3f652-9ae3-4e70-b1b6-03c04ec350e9","trace_id":"99da81e0-4b75-4244-9815-041a5b2e5b1d"}
[2026-05-07 11:54:25] local.INFO: [RetryFailedDownloads] Starting {"options":{"from":null,"to":null,"help":false,"silent":false,"quiet":false,"verbose":false,"version":false,"ansi":null,"no-interaction":false,"env":null}} {"correlation_id":"0aaa4815-3c2f-4bb5-8419-1806dfb67969","trace_id":"d9f895a3-4d96-4e9e-9257-917f0a137c9a"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"f0d63a2f-6bff-4d65-89c9-a66c4f23c5b7","trace_id":"6cc4951c-0566-4c82-816a-a69e6b8d576e"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d005add7-b27b-4ea1-ae8a-a787f14c5102","trace_id":"5356663c-78d3-4c53-9fd9-5ee71d38185b"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring start {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:13] local.NOTICE: Monitoring end {"correlation_id":"d43867d7-6e0b-45f3-a8fe-e9bfb99025db","trace_id":"963ca688-ac6a-436f-8a97-7a70b7dba5da"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"56e25a5f-7a30-4d2b-b53a-6f0bedaaf5d6","trace_id":"cdf056fc-90c9-4305-a1d7-4650f40a96e3"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"079f9115-4f26-445b-8297-80cfbbd4f64a","trace_id":"eaaaaf01-ff00-4b8b-8522-3ef31ce507f9"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"6a5657d6-f93d-48a6-aea1-9176101a0d61","trace_id":"41c9f0c1-8062-4cd6-a502-2a87b9c61c36"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"41c1717f-e9e6-4023-a013-6fb1949b8d35","trace_id":"7da75940-641f-4e0e-a514-e66c49f40e13"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Running pre-meeting notification command {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:31] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7f50e440-deab-474a-9de3-31bd4c2a8d49","trace_id":"cc2f5e3b-a686-4e31-88c5-1636d3e359b2"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:45:00, 2026-05-07 11:50:00] {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"08cfdbe5-6343-42e3-bbaf-38fd1b23a19d","trace_id":"bfbbf317-33b9-4b99-b839-62bed8c2ace9"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:50","to":"11:55"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:45","to":"01:50"} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:39] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"eb62b20d-49ee-4dc6-a341-7838c53eee06","trace_id":"0088a2fa-9e22-40ea-8903-8a5a2fbb627a"}
[2026-05-07 11:55:43] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:43] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] 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":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:44] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"3aa13271-8a61-421d-a335-538915a1692b","trace_id":"67dc3600-bfb4-49a7-b69a-aee31a99b5bf"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"171cb8dd-43fa-4dc9-b2d3-b476c048761f","trace_id":"203bf386-8bee-4b26-a4f7-ee107fdb1ef3"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T11:57:52.578394Z"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"361f8b4a-3c67-4dd6-b412-8bb8bf68da66","trace_id":"a39312b8-d5dd-4545-8c38-cc6f0691abca"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:53] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:55:58] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"5365ec40-1e98-40a1-9714-e15cc9d29a13","trace_id":"1591592b-30c4-426e-83ba-1f5433d10801"}
[2026-05-07 11:56:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"5365ec4...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3003
|
119
|
10
|
2026-05-07T11:56:19.826342+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154979826_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2• •ShellEditViewSessionScriptsProfilesWindow iTerm2• •ShellEditViewSessionScriptsProfilesWindowHelplahlSupport Daily - in 4 m100% [8DEV (docker)DOCKER*1DEV (docker)H82APP (-zsh)-zshcachecompiledeventsroutesviewsjiminny-worker-processing-4:jiminny-worker-processing-4_00:stoppedjiminny-worker-processing-2:jiminny-worker-processing-2_00:stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00:stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00:stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00:stoppedworker-download:worker-download_00: stoppedworker-nudges:worker-nudges_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-audio:worker-audio_00: stoppedworker-conferences:worker-conferences_00:stoppedworker-emails:worker-emails_00: stoppedjiminny-worker-processing-1: jiminny-worker-processing-1_00: stoppedworker:worker_00: stoppedworker-es-update:worker-es-update_00: stoppedworker-calendar:worker-calendar_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564Syncing opportunity for HubspotSyncing opportunity 374720564..• $4screenpipe"•$519.93ms DONE3.28ms DONE4.77ms DONE2.64ms DONE20.16ms DONE-zshThu 7 May 14:56:19181₴6DEV...
|
NULL
|
4215290884773581007
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2• •ShellEditViewSessionScriptsProfilesWindow iTerm2• •ShellEditViewSessionScriptsProfilesWindowHelplahlSupport Daily - in 4 m100% [8DEV (docker)DOCKER*1DEV (docker)H82APP (-zsh)-zshcachecompiledeventsroutesviewsjiminny-worker-processing-4:jiminny-worker-processing-4_00:stoppedjiminny-worker-processing-2:jiminny-worker-processing-2_00:stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00:stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00:stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00:stoppedworker-download:worker-download_00: stoppedworker-nudges:worker-nudges_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-audio:worker-audio_00: stoppedworker-conferences:worker-conferences_00:stoppedworker-emails:worker-emails_00: stoppedjiminny-worker-processing-1: jiminny-worker-processing-1_00: stoppedworker:worker_00: stoppedworker-es-update:worker-es-update_00: stoppedworker-calendar:worker-calendar_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan crm:sync-opportunity --teamId=2 --opportunityId 374720564Syncing opportunity for HubspotSyncing opportunity 374720564..• $4screenpipe"•$519.93ms DONE3.28ms DONE4.77ms DONE2.64ms DONE20.16ms DONE-zshThu 7 May 14:56:19181₴6DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3004
|
119
|
11
|
2026-05-07T11:56:21.542332+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154981542_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:17] local.NOTICE: Monitoring start {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:17] local.NOTICE: Monitoring end {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:17] local.NOTICE: Monitoring start {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:17] local.NOTICE: Monitoring end {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:56:17] local.NOTICE: Monitoring start {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:17] local.NOTICE: Monitoring end {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-238529489401130318
|
5225837878679570532
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:17] local.NOTICE: Monitoring start {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:17] local.NOTICE: Monitoring end {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3003
|
NULL
|
NULL
|
NULL
|
|
3005
|
120
|
10
|
2026-05-07T11:56:19.747697+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154979747_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormProiect vINavigarecodeFV faVsco.js#SF fiim PhostormProiect vINavigarecodeFV faVsco.js#SF fiiminnv@localhostl4 HS local filiminnv@localhostlconsole [pRodl4console [EUl© TranscodeParameterResolve© RateLimitExce(C) UserService.ohoUuid.php> D Traits© AddRateLimitCommand.phpA console [STAGING]> O User> O Utils> C Validation•Uvephp nelpers.onpInitialFrontendState.phpJiminny.phpc) Plan.ohoc) serializer.ono© TeamScimDetails.php> bootstrar• D build> L conticM contrib• database• M docs> tront-endD lang› node_modules library root> phpstan• M oublic>O resourcesv G routesphp api.phpphp api_v2.phppnp console.ongpnp customer_aoi.onppnp embedded.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv L storage> M debugbarM frameworkv logsaitianore• audio.wav= custom.loa=hubsnot-iournal-noll.log= laravel.log‹B ohnunit ymlus tht isT OpportunitySyncTrait.phg© HubspotSingleSyncStrategy.phpwebnooksyncbatchProcessor.pnp© ImportOpportunityBatch.php0 Http/RateLimited.pho© BaseRateLimiter.php© Service.pho(© SyncCrmEntitiesTrait.php(C) SyncTeamMetadata.ohoC) RateLimit.php() RateLimiterinstance.ohp[2026-05-07 11:51:09] local.INF0: Jiminny \Console\Commands\Command::run Memory usage before starting command{"command" : "meeting-bot:schedule-bot" "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb":99.727}{"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026" "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:09] local.INF0: [ScheduleBotCommand] Number of activities to be captured: 0{"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026", "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:09] local.INF0: Jiminny\ Console\Commands\Cond::run Memory usage for commandlandInMb":62.0. "memoryAfterCommandInMB" :62.0.cLass CLiet exteuds Baragtiatt uatdeeneta bubspotcLientInterface): \Generator {...12161218"memoryPeakBeforecommandInMb":99.727."memoryPeakAftercommandInMB":99.727("correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026", "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:131 local,INF0: Jiminnv\Console|Commands\Command::run Memory usage before startina command* achrows DealAotExcention("command":"dialers:monitor-activities", "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb":99 .727}"correlation id":"b3fe4da8-30ch-4e4e-9c1b-fc2dd984fd43" "trace 1d":"b1a09140-0467-4454-9c6a-2d565adf8ce0"}[2026-05-07 11:51:13] Local.INFO: Jiminny\Console\Commands\Command: :run Memory usage for command{"command":"dialers:monitor-activities", "memoryBeforeCommandInMb":62.0, "memoryAfterCommandInMB":62.0,nubic function getOooortunitvßvidstrina Scrmid. arrav Sfields): arrav.andInMb":99 .727, "memoryPeakAfterCommandInMB" : 99 . 727}_"cornplation id".nh3fo4da8-30ch-he/e-0c1h-Fc2dd084Fd4z" "+nace 1d"+1h1a09140-6467-4454-0c6a-2d565adf8cpA"3try 1Sdeal = Sthis->getNewInstance@->crm(->deals(->basicAni@->qetById([2026-05-07 11:51:141Local.NOTICE: Monitoring start{"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}Sdeal = Sthis-›executeRequest(fn () => Sthis->getNewInstance () ->crm() -›deals() ->basicApi()->get [2026-05-07 11:51:14]Local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa",sermloInplode separator,, StlelasItnaco idil.101591069-6142#[2026-05-07 11:51:16]Local. INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command{"command": "mailbox:skip-lists:refresh" "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb" :99.727}{"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9" "trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}[2026-05-07 11:51:16] local.INF0: Jiminny\Console\Commands\Command::run Memory usage for command)):} catch (DealAoiException $e) {{"command" : "mailbox:skip-lists:refresh" "memoryBeforeCommandInMb" :62.0. "memoryAfterCommandInMB" : 62.0."memoryPeakBeforeCommandInMb" :99.727. "memoryPeakAfterCommandInMB" :99.727}{"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9" "trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}[2026-05-07 11:51:18] local.INF0: Jiminny Console\ Commands\ Command::run Memory usage before starting commandreason' => se->detMessadeOl{"command" : "mailbox:batch: process" "memoryBeforeCommandInMb":62.0. "memoryPeakBeforeCommandInMb":99.727}{"correlation_ id": "330decfd-35d2-495c-8eb2-5ececd33f1e8" "trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}[2026-05-07 11:51:181 local,INF0: [EmailSchedulel STARTING batch process {"host"."docker lamo 1"}throw Se:{"correlation id"."330decfd-35d2-495c-8eb2-Sececd33f1e8" "trace id"."e49010ea-67ce-43ae-be95-beSe1171e626"}[2026-05-07 11:51:181 local,INF0: [EmailSchedulel FINISHED batch process {"host"-"docker lamo 1" "orocessed"•0}f"correlation id"."330decfd-35d2-495c-8eb2-Sececd33f1e8" "trace id"."e49010ea-67ce-43ae-be95-beSe1171e626"}$l Sdeal inctancenf NenlWithAccociationg)thnow new ComFycentiont messade"Neal not found!•2026-05-07 11:51:18 Local.INF0: Jiminny Console Commands Command: :run Memory usage for commandandInMb":62.0. "memorvAfterCommandInMB":62.01IIIIreturn('id' => $deal->getIdOl"properties' => Sdeal->getPronenties@)loccaniotjonel = SdoolСaotlecлiдtinne()* Generic batch read method for Hubspot obtects* Onaram striofX Reject File 1'contacts')andinMb":99.121."memoryPeakAfterCommandInMB":99.727%f"correlation_id": "330decfd-35d2-495c-Beb2-5ececd33f1e8", "trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}• (2026-05-07 11:51:201 local,INF0: Jiminny\ Console\ Commands\Command::run Memory usage before starting commanc{"command": "crm: sync-hubspot-objects", "memoryBeforeCommandInMb" : 62.0, "memoryPeakBeforeCommandInMb" :99.727}_"cornelation id"."e7he5ae8-8ec8-475f-ae27-001c11ch6afc"l "tnace id"."hecc8fh7-6f7a-46d6-024h-e70h82f36ae0"}і- [2026-05-07 11:51:201 Local. INFO: Jiminny|ConsoLe|Connands\Connand: :run Menory usage for commane{"command": "crm: sync-hubspot-objects", "memoryBeforeCommandInMb":62.0, "memoryAfterCommandInMB":62.0,memoryPeakBeforeCommandInMb":99.727, "memoryPeakAfterCommandInMB" :99.727}{"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc" "trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}[2026-05-07 11:51:21] local.INF0: [SyncHubspot0bjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4")"usage": 24613944, "real usage":65011712, "pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a" ."trace id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}[2026-05-07 11:51:21] local.INF0: [SocialAccountServicel Fetching token {"socialAccountId":1499, "provider":"hubspot"}SanarQube for INE suadedons. Deteat.more securitiscuecin.wour.DLD.files//Tin/Sonar@ube Cloud.for.free//[EMAIL]/leam.more_//Donit.ask.again./itodav 10:25)CascadeHubSpot Rate Limiting<S0 hllsuppont Dally • In4m100% LzThu 7 May 14:56:19U AskJiminnyReportActivityServiceTest vNew CascadeWCascade Code x•.Kick off a new project. Make changesacross your entire codedase.HubSpot Rate Limiting IntegrationC, Fixing Favicon Inconsistency© Fix Flaky Automated Reports TestsAsk anvthing (*4L)+ « CodeC° AdantiveW Windsurf Teams UTF-8...
|
NULL
|
-278530749587192116
|
NULL
|
click
|
ocr
|
NULL
|
PhostormProiect vINavigarecodeFV faVsco.js#SF fiim PhostormProiect vINavigarecodeFV faVsco.js#SF fiiminnv@localhostl4 HS local filiminnv@localhostlconsole [pRodl4console [EUl© TranscodeParameterResolve© RateLimitExce(C) UserService.ohoUuid.php> D Traits© AddRateLimitCommand.phpA console [STAGING]> O User> O Utils> C Validation•Uvephp nelpers.onpInitialFrontendState.phpJiminny.phpc) Plan.ohoc) serializer.ono© TeamScimDetails.php> bootstrar• D build> L conticM contrib• database• M docs> tront-endD lang› node_modules library root> phpstan• M oublic>O resourcesv G routesphp api.phpphp api_v2.phppnp console.ongpnp customer_aoi.onppnp embedded.ongpnp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv L storage> M debugbarM frameworkv logsaitianore• audio.wav= custom.loa=hubsnot-iournal-noll.log= laravel.log‹B ohnunit ymlus tht isT OpportunitySyncTrait.phg© HubspotSingleSyncStrategy.phpwebnooksyncbatchProcessor.pnp© ImportOpportunityBatch.php0 Http/RateLimited.pho© BaseRateLimiter.php© Service.pho(© SyncCrmEntitiesTrait.php(C) SyncTeamMetadata.ohoC) RateLimit.php() RateLimiterinstance.ohp[2026-05-07 11:51:09] local.INF0: Jiminny \Console\Commands\Command::run Memory usage before starting command{"command" : "meeting-bot:schedule-bot" "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb":99.727}{"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026" "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:09] local.INF0: [ScheduleBotCommand] Number of activities to be captured: 0{"correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026", "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:09] local.INF0: Jiminny\ Console\Commands\Cond::run Memory usage for commandlandInMb":62.0. "memoryAfterCommandInMB" :62.0.cLass CLiet exteuds Baragtiatt uatdeeneta bubspotcLientInterface): \Generator {...12161218"memoryPeakBeforecommandInMb":99.727."memoryPeakAftercommandInMB":99.727("correlation_id":"ec212da0-f35f-4e3a-ae85-825aec5b1026", "trace_id":"d9ef9e31-d20b-4762-b9b4-46c99818f38f"}[2026-05-07 11:51:131 local,INF0: Jiminnv\Console|Commands\Command::run Memory usage before startina command* achrows DealAotExcention("command":"dialers:monitor-activities", "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb":99 .727}"correlation id":"b3fe4da8-30ch-4e4e-9c1b-fc2dd984fd43" "trace 1d":"b1a09140-0467-4454-9c6a-2d565adf8ce0"}[2026-05-07 11:51:13] Local.INFO: Jiminny\Console\Commands\Command: :run Memory usage for command{"command":"dialers:monitor-activities", "memoryBeforeCommandInMb":62.0, "memoryAfterCommandInMB":62.0,nubic function getOooortunitvßvidstrina Scrmid. arrav Sfields): arrav.andInMb":99 .727, "memoryPeakAfterCommandInMB" : 99 . 727}_"cornplation id".nh3fo4da8-30ch-he/e-0c1h-Fc2dd084Fd4z" "+nace 1d"+1h1a09140-6467-4454-0c6a-2d565adf8cpA"3try 1Sdeal = Sthis->getNewInstance@->crm(->deals(->basicAni@->qetById([2026-05-07 11:51:141Local.NOTICE: Monitoring start{"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa","trace_id":"01591060-61f2-47d3-987c-aec0560f8e37"}Sdeal = Sthis-›executeRequest(fn () => Sthis->getNewInstance () ->crm() -›deals() ->basicApi()->get [2026-05-07 11:51:14]Local.NOTICE: Monitoring end {"correlation_id":"21d5080e-49cd-4e3f-a58e-4992807c93fa",sermloInplode separator,, StlelasItnaco idil.101591069-6142#[2026-05-07 11:51:16]Local. INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command{"command": "mailbox:skip-lists:refresh" "memoryBeforeCommandInMb":62.0, "memoryPeakBeforeCommandInMb" :99.727}{"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9" "trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}[2026-05-07 11:51:16] local.INF0: Jiminny\Console\Commands\Command::run Memory usage for command)):} catch (DealAoiException $e) {{"command" : "mailbox:skip-lists:refresh" "memoryBeforeCommandInMb" :62.0. "memoryAfterCommandInMB" : 62.0."memoryPeakBeforeCommandInMb" :99.727. "memoryPeakAfterCommandInMB" :99.727}{"correlation_id":"8f654752-d48d-4a32-999d-8bd28efddcf9" "trace_id":"a1b12c25-e1c3-4d7a-ac9b-8548cdba4e93"}[2026-05-07 11:51:18] local.INF0: Jiminny Console\ Commands\ Command::run Memory usage before starting commandreason' => se->detMessadeOl{"command" : "mailbox:batch: process" "memoryBeforeCommandInMb":62.0. "memoryPeakBeforeCommandInMb":99.727}{"correlation_ id": "330decfd-35d2-495c-8eb2-5ececd33f1e8" "trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}[2026-05-07 11:51:181 local,INF0: [EmailSchedulel STARTING batch process {"host"."docker lamo 1"}throw Se:{"correlation id"."330decfd-35d2-495c-8eb2-Sececd33f1e8" "trace id"."e49010ea-67ce-43ae-be95-beSe1171e626"}[2026-05-07 11:51:181 local,INF0: [EmailSchedulel FINISHED batch process {"host"-"docker lamo 1" "orocessed"•0}f"correlation id"."330decfd-35d2-495c-8eb2-Sececd33f1e8" "trace id"."e49010ea-67ce-43ae-be95-beSe1171e626"}$l Sdeal inctancenf NenlWithAccociationg)thnow new ComFycentiont messade"Neal not found!•2026-05-07 11:51:18 Local.INF0: Jiminny Console Commands Command: :run Memory usage for commandandInMb":62.0. "memorvAfterCommandInMB":62.01IIIIreturn('id' => $deal->getIdOl"properties' => Sdeal->getPronenties@)loccaniotjonel = SdoolСaotlecлiдtinne()* Generic batch read method for Hubspot obtects* Onaram striofX Reject File 1'contacts')andinMb":99.121."memoryPeakAfterCommandInMB":99.727%f"correlation_id": "330decfd-35d2-495c-Beb2-5ececd33f1e8", "trace_id":"e49010ea-67ce-43ae-be95-be5e1171e626"}• (2026-05-07 11:51:201 local,INF0: Jiminny\ Console\ Commands\Command::run Memory usage before starting commanc{"command": "crm: sync-hubspot-objects", "memoryBeforeCommandInMb" : 62.0, "memoryPeakBeforeCommandInMb" :99.727}_"cornelation id"."e7he5ae8-8ec8-475f-ae27-001c11ch6afc"l "tnace id"."hecc8fh7-6f7a-46d6-024h-e70h82f36ae0"}і- [2026-05-07 11:51:201 Local. INFO: Jiminny|ConsoLe|Connands\Connand: :run Menory usage for commane{"command": "crm: sync-hubspot-objects", "memoryBeforeCommandInMb":62.0, "memoryAfterCommandInMB":62.0,memoryPeakBeforeCommandInMb":99.727, "memoryPeakAfterCommandInMB" :99.727}{"correlation_id":"e7be5ae8-8ec8-475f-ae27-9e1c11cb6afc" "trace_id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}[2026-05-07 11:51:21] local.INF0: [SyncHubspot0bjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4")"usage": 24613944, "real usage":65011712, "pid":22511} {"correlation_id":"fac7406d-bc3b-44f5-87da-1ab6df99557a" ."trace id":"becc8fb7-6f7a-46d6-92fb-e79b82f36ae0"}[2026-05-07 11:51:21] local.INF0: [SocialAccountServicel Fetching token {"socialAccountId":1499, "provider":"hubspot"}SanarQube for INE suadedons. Deteat.more securitiscuecin.wour.DLD.files//Tin/Sonar@ube Cloud.for.free//[EMAIL]/leam.more_//Donit.ask.again./itodav 10:25)CascadeHubSpot Rate Limiting<S0 hllsuppont Dally • In4m100% LzThu 7 May 14:56:19U AskJiminnyReportActivityServiceTest vNew CascadeWCascade Code x•.Kick off a new project. Make changesacross your entire codedase.HubSpot Rate Limiting IntegrationC, Fixing Favicon Inconsistency© Fix Flaky Automated Reports TestsAsk anvthing (*4L)+ « CodeC° AdantiveW Windsurf Teams UTF-8...
|
3002
|
NULL
|
NULL
|
NULL
|
|
3006
|
120
|
11
|
2026-05-07T11:56:22.581792+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154982581_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:17] local.NOTICE: Monitoring start {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:17] local.NOTICE: Monitoring end {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:17] local.NOTICE: Monitoring start {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:17] local.NOTICE: Monitoring end {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 11:56:17] local.NOTICE: Monitoring start {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:17] local.NOTICE: Monitoring end {\"correlation_id\":\"cbbbbe2e-8bed-41dc-abc7-5742ddacc276\",\"trace_id\":\"734e8fa8-a942-422b-9bd8-a3b69837f5c7\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-238529489401130318
|
5225837878679570532
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:17] local.NOTICE: Monitoring start {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:17] local.NOTICE: Monitoring end {"correlation_id":"cbbbbe2e-8bed-41dc-abc7-5742ddacc276","trace_id":"734e8fa8-a942-422b-9bd8-a3b69837f5c7"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:18] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3008
|
119
|
13
|
2026-05-07T11:56:27.362827+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154987362_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:56:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}\n[2026-05-07 11:56:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"837722ff-536e-480d-a9f0-26d8547e2ccb\",\"trace_id\":\"96f25bf3-07d4-4bb5-aaeb-058c1cab519e\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
840040475412589338
|
6378757184263424100
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
[2026-05-07 11:56:26] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"837722ff-536e-480d-a9f0-26d8547e2ccb","trace_id":"96f25bf3-07d4-4bb5-aaeb-058c1cab519e"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3007
|
NULL
|
NULL
|
NULL
|
|
3012
|
120
|
13
|
2026-05-07T11:56:34.155188+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154994155_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4197915254901331416
|
6378757184196053092
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3013
|
119
|
16
|
2026-05-07T11:56:34.592696+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154994592_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4197915254901331416
|
6378757184196053092
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
60
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3014
|
119
|
17
|
2026-05-07T11:56:36.342397+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154996342_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24892720,"real_usage":65011712,"pid":22511} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:36] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24892720,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":525.05} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":562.09,\"usage\":25014776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24992776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":20.96,\"usage\":24889248,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24927616,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.3,\"usage\":24883048,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24921416,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.69,\"usage\":24856464,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24892720,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":525.05} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":562.09,\"usage\":25014776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24992776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":20.96,\"usage\":24889248,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24927616,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.3,\"usage\":24883048,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24921416,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.69,\"usage\":24856464,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.016666668,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.02111111},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.025555555},"on_screen":false,"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.0,"top":0.0,"width":0.014583333,"height":0.025555555},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2951150271425694993
|
-4033565188375803548
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24892720,"real_usage":65011712,"pid":22511} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:36] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3013
|
NULL
|
NULL
|
NULL
|
|
3015
|
120
|
14
|
2026-05-07T11:56:38.675933+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778154998675_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24892720,"real_usage":65011712,"pid":22511} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:36] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24892720,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":525.05} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":562.09,\"usage\":25014776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24992776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":20.96,\"usage\":24889248,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24927616,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.3,\"usage\":24883048,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24921416,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.69,\"usage\":24856464,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.45977393,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:30] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bdd10968-9f58-450d-b3ea-c766cbaa51bf\",\"trace_id\":\"4b7efedb-a992-428e-999b-274c689604f2\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"07eac629-9b84-462f-a0cb-78aca194d687\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":24892720,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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.51,\"average_seconds_per_request\":0.51} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":525.05} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":562.09,\"usage\":25014776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"3797cb62-7b0d-4b58-98c8-36c1501e759c\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24992776,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] 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\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":109,\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":20.96,\"usage\":24889248,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"44d96795-6f79-4463-912f-4edb59b6dab5\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24927616,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.3,\"usage\":24883048,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"00f39359-b046-4e82-a2c0-ffd22b92a55a\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24921416,\"real_usage\":65011712,\"pid\":22511} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}\n[2026-05-07 11:56:36] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":14.69,\"usage\":24856464,\"real_usage\":65011712,\"pid\":22511,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"4a9efba2-358d-40ac-ad21-f921e8377790\",\"trace_id\":\"3d26d796-e5ef-4793-96f9-db2ef0c28473\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.007978723,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"60","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"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.27027926,"top":1.0,"width":0.006981383,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n ));\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2951150271425694993
|
-4033565188375803548
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:54:00, 2026-05-07 11:56:00] {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:30] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"bdd10968-9f58-450d-b3ea-c766cbaa51bf","trace_id":"4b7efedb-a992-428e-999b-274c689604f2"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"07eac629-9b84-462f-a0cb-78aca194d687","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":24892720,"real_usage":65011712,"pid":22511} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:35] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"3797cb62-7b0d-4b58-98c8-36c1501e759c","trace_id":"3d26d796-e5ef-4793-96f9-db2ef0c28473"}
[2026-05-07 11:56:36] local.INFO: [Hubspot] Pagination completed {"team_id":2,"endpoint":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
));
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3012
|
NULL
|
NULL
|
NULL
|
|
3039
|
119
|
28
|
2026-05-07T11:57:41.409486+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155061409_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] 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\":221.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring start {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring end {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"f5ad7cc8-118b-45be-b06e-23ccfe81c941\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] 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\":221.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring start {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring end {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"f5ad7cc8-118b-45be-b06e-23ccfe81c941\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3457893069975321302
|
5404735668402908329
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3040
|
120
|
28
|
2026-05-07T11:57:41.437837+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155061437_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] 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\":221.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring start {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring end {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"f5ad7cc8-118b-45be-b06e-23ccfe81c941\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] 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\":221.3,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.73} {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:56:49] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"6c9bf625-7021-4c85-a902-c5eeab199305\",\"trace_id\":\"1573b6c1-faaf-44f3-923e-3fafc5903888\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"770c7cdd-6cae-46e0-9f78-584845f53b19\",\"trace_id\":\"951b331b-4b81-41ff-a188-099f08904b82\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"38485496-7e02-4997-91d3-137308b034ad\",\"trace_id\":\"b0bf095c-6b5d-489b-a0fb-da63291c47de\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring start {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:11] local.NOTICE: Monitoring end {\"correlation_id\":\"99351333-5ac0-4002-8ad2-2ea04fd7a20e\",\"trace_id\":\"4566bc74-4a12-436f-9f00-101a310d4ffd\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2e4a2653-cccd-4c9b-aa73-b0776affdc78\",\"trace_id\":\"272a5fd2-ff2b-49a7-8d2b-42e7473b9d6b\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"14c5d560-6305-4b2a-86da-a4eba0e31c42\",\"trace_id\":\"70341014-7224-4553-b2c4-c466f2e0256d\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"bb6cc478-4e59-4c2c-b4af-5ed9ba324f03\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}\n[2026-05-07 11:57:18] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 2 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"f5ad7cc8-118b-45be-b06e-23ccfe81c941\",\"trace_id\":\"87788d0f-5cf7-4343-999f-d297cdb5af04\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.17478053,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3457893069975321302
|
5404735668402908329
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"6c9bf625-7021-4c85-a902-c5eeab199305","trace_id":"1573b6c1-faaf-44f3-923e-3fafc5903888"}
[2026-05-07 11:56:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3044
|
119
|
30
|
2026-05-07T11:57:51.352091+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155071352_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1231961154489444317
|
-1008390064536195701
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3045
|
120
|
31
|
2026-05-07T11:57:51.442190+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155071442_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9066241},"on_screen":true,"value":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.17478053,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1231961154489444317
|
-1008390064536195701
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3043
|
NULL
|
NULL
|
NULL
|
|
3046
|
119
|
31
|
2026-05-07T11:57:53.156541+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155073156_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}\n[2026-05-07 11:57:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-opportunity\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa2afc1a-7b40-4d1f-abd0-89636515ce08\",\"trace_id\":\"e5764bcc-92a4-4afe-a640-5886bb61c05b\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1231961154489444317
|
-1008390064536195701
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
[2026-05-07 11:57:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-opportunity","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa2afc1a-7b40-4d1f-abd0-89636515ce08","trace_id":"e5764bcc-92a4-4afe-a640-5886bb61c05b"}
Sync Changes
Hide This Notification
Code changed:
Hide
5
120
4
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Console\Commands;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use InvalidArgumentException;
use Jiminny\Jobs\AutomatedReports\RequestGenerateAskJiminnyReportJob;
use Jiminny\Jobs\AutomatedReports\SendReportMailJob;
use Jiminny\Jobs\JobDispatcherInterface;
use Jiminny\Models\Activity;
use Jiminny\Models\AutomatedReport;
use Jiminny\Models\AutomatedReportResult;
use Jiminny\Models\Team;
use Jiminny\Models\User;
use Jiminny\Repositories\AutomatedReportsRepository;
use Jiminny\Services\Activity\CrmOwnerResolver;
use Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsService;
use Jiminny\Services\UserPilot\UserPilotClient;
/**
* Class JiminnyDebugCommand
*
* @package Jiminny\Console\Commands
*/
class JiminnyDebugCommand extends Command
{
public const string FREQUENCY_DAILY = 'daily';
public const string FREQUENCY_WEEKLY = 'weekly';
public const string FREQUENCY_MONTHLY = 'monthly';
public const string FREQUENCY_QUARTERLY = 'quarterly';
public const string FREQUENCY_ONE_OFF = 'one_off';
protected $signature = 'jiminny:debug';
public function handle(
JobDispatcherInterface $jobDispatcher,
AutomatedReportsService $automatedReportsService,
AutomatedReportsRepository $automatedReportsRepository,
UserPilotClient $userPilotClient
): void {
$this->rateLimit();
exit(1);
$report = AutomatedReport::find(71);
$last = AutomatedReportResult::query()
->where('report_id', $report->getId())
->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])
// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)
->whereDate('created_at', CarbonImmutable::now()->toDateString())
->latest()
->first();
$this->info("Last: {$last->getId()}");
exit(1);
$user = User::find(143);
// $count = $automatedReportsRepository->countUserReports($user);
// $this->info("Count: {$count}");
// $count = $automatedReportsRepository->countAllUserReports($user);
// $this->info("All count: {$count}");
$payload = [
'report_type' => 'ask_jiminny',
'frequency' => 'weekly',
];
$userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);
exit(1);
$now = Carbon::now()->subDay(1);
$this->info("Now: {$now->toDateTimeString()}");
$weekStart = Carbon::getWeekStartsAt();
$this->info("Now: {$weekStart}");
// $from = $now->copy()->previousWeekday()->startOfDay();
// $to = $now->copy()->previousWeekday()->endOfDay();
// $fromOld = $now->copy()->subWeeks(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subWeek()->startOfWeek();
// $toNew = $now->copy()->subWeek()->endOfWeek();
// $fromOld = $now->copy()->subMonths(1)->startOfDay();
// $toOld = $now->copy()->subDay()->endOfDay();
// $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();
// $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();
$fromOld = $now->copy()->subMonths(3)->startOfDay();
$toOld = $now->copy()->subDay()->endOfDay();
$fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();
$toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();
$this->info("From old: {$fromOld->toDateTimeString()}");
$this->info("To old: {$toOld->toDateTimeString()}");
$this->info("From new: {$fromNew->toDateTimeString()}");
$this->info("To new: {$toNew->toDateTimeString()}");
exit(1);
$report = AutomatedReport::find(71);
$job = new RequestGenerateAskJiminnyReportJob($report->getUuid());
$jobDispatcher->dispatch($job);
exit(1);
// $this->formatDate($jobDispatcher);
// $this->sendMail($jobDispatcher, $automatedReportsService);
// $this->crmService();
$this->getPayload($automatedReportsService);
exit(1);
}
private function crmService()
{
$activity = Activity::find(418141);
$team = Team::find(19);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
$crmService->createTranscriptNotes($activity);
}
private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)
{
$reportUuid = '';
// $report = $automatedReportsService->getReportResult($reportUuid);
$report = AutomatedReportResult::find(275);
$validRecipients = $automatedReportsService->getValidRecipientUsers(
$report->getReport(),
includeJiminny: true,
);
$recipient = $validRecipients[0];
$fileName = $automatedReportsService->getReportFileName($report);
$typeName = $report->getReport()->getCustomName()
?? $automatedReportsService->getReportTypeName($report);
$teamsName = $automatedReportsService->getReportTeamsName($report);
$periodName = $automatedReportsService->getReportPeriodName($report);
$s3Path = $automatedReportsService->getMediaPath($report);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));
$jobDispatcher->dispatch(
new SendReportMailJob(
reportUuid: $report->getUuid(),
s3Path: $s3Path,
recipientEmail: $recipient['email'],
recipientName: $recipient['name'] ?? null,
fileName: $fileName,
typeName: $typeName,
teamsName: $teamsName,
periodName: $periodName,
isAskJiminny: true,
)
);
exit(1);
}
private function formatDate(JobDispatcherInterface $jobDispatcher): void
{
$customName = 'Custom report name';
// $frequency = self::FREQUENCY_DAILY;
// $frequency = self::FREQUENCY_WEEKLY;
$frequency = self::FREQUENCY_MONTHLY;
// $frequency = self::FREQUENCY_QUARTERLY;
// $frequency = self::FREQUENCY_ONE_OFF;
$period = $this->calculateFromAndToDatePeriod($frequency);
$from = $period['fromDate'];
$to = $period['toDate'];
$periodName = $this->formatReportPeriodName($frequency, $from, $to);
$filenameSuffix = null;
if ($customName) {
if ($filenameSuffix) {
$customName .= " {$filenameSuffix}";
}
$result = $this->sanitizeFileName("{$customName} - {$periodName}");
}
$this->info($result);
}
public function calculateFromAndToDatePeriod(
string $frequency,
?Carbon $fromDate = null,
?Carbon $toDate = null
): array {
if ($frequency === self::FREQUENCY_ONE_OFF) {
return [
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
$now = Carbon::now();
return match ($frequency) {
self::FREQUENCY_DAILY => [
'fromDate' => $now->copy()->subDay()->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_WEEKLY => [
'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_MONTHLY => [
'fromDate' => $now->copy()->subMonths(1)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
self::FREQUENCY_QUARTERLY => [
'fromDate' => $now->copy()->subMonths(3)->startOfDay(),
'toDate' => $now->copy()->subDay()->endOfDay(),
],
default => throw new InvalidArgumentException("Unsupported frequency: {$frequency}"),
};
}
private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string
{
$fromYear = $from->format('Y');
$toYear = $to->format('Y');
$differentYears = $fromYear !== $toYear;
switch ($frequency) {
case self::FREQUENCY_DAILY:
return $from->format('j M Y');
case self::FREQUENCY_QUARTERLY:
// 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ
$startMonth = $from->format('M');
$endMonth = $to->copy()->subMonth();
$endMonthName = $endMonth->format('M');
$endMonthYear = $endMonth->format('Y');
if ($differentYears) {
return "{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}";
}
return "{$startMonth} - {$endMonthName} {$toYear}";
case self::FREQUENCY_MONTHLY:
// 'May 2025' - monthly reports are always within the same year
return $from->format('M Y');
case self::FREQUENCY_WEEKLY:
// '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ
$startDay = $from->format('j');
$endDay = $to->format('j');
$startMonth = $from->format('M');
$endMonth = $to->format('M');
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
if ($startMonth !== $endMonth) {
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
}
return "{$startDay} - {$endDay} {$endMonth} {$toYear}";
case self::FREQUENCY_ONE_OFF:
// '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ
$startDay = $from->format('j');
$startMonth = $from->format('M');
$endDay = $to->format('j');
$endMonth = $to->format('M');
// If same month and year, use a format like '2-31 May 2025'
if ($startMonth === $endMonth && ! $differentYears) {
return "{$startDay} - {$endDay} {$startMonth} {$toYear}";
}
// If different years, include both years
if ($differentYears) {
return "{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}";
}
// Same year but different months
return "{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}";
default:
// Default format for unknown frequencies
return $from->format('j M Y') . ' - ' . $to->format('j M Y');
}
}
public function sanitizeFileName(string $fileName): string
{
return str_replace(['/', '\\'], '-', $fileName);
}
private function getPayload(AutomatedReportsService $automatedReportsService)
{
$reportResult = AutomatedReportResult::find(269);
$automatedReport = $reportResult->getReport();
$activityIds = [1,2,3];
$payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(
automatedReport: $automatedReport,
reportResult: $reportResult,
activityIds: $activityIds,
);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));
}
private function rateLimit()
{
$team = Team::find(2);
$config = $team->getCrmConfiguration();
$crmResolver = app(CrmOwnerResolver::class, [
'team' => $team,
'integrationAdmin' => $team->getOwner(),
'providerSlug' => $config->getProviderName(),
]);
$crmService = $crmResolver->prepareCrmService();
for ($i = 0 ; $i < 120; $i++) {
if ($i % 10 === 0) {
$this->info("Syncing opportunity {$i}");
}
$crmService->syncOpportunity('374720564');
}
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3057
|
119
|
37
|
2026-05-07T11:58:29.443845+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155109443_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3140226296908787412
|
8279706133930369215
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
3055
|
NULL
|
NULL
|
NULL
|
|
3058
|
120
|
37
|
2026-05-07T11:58:29.431908+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155109431_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.17478053,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3140226296908787412
|
8279706133930369215
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
3056
|
NULL
|
NULL
|
NULL
|
|
3061
|
120
|
39
|
2026-05-07T11:58:33.399391+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155113399_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"9483899e-8d67-4eff-a567-172ccbb6692d\",\"trace_id\":\"45a4883e-acde-4fea-8747-c841e01fc14d\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e54ecc5e-4a40-4886-96fe-57b3cc9456f9\",\"trace_id\":\"2ae60d35-0e26-4e6b-8d64-e707af92838b\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6\",\"trace_id\":\"bb28f335-a2b9-448e-8cee-3803996984af\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring start {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:08] local.NOTICE: Monitoring end {\"correlation_id\":\"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8\",\"trace_id\":\"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf\"}\n[2026-05-07 11:58:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985\",\"trace_id\":\"d5a0e82c-2873-4f8f-8a63-36dc2cd32295\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"b9e243bc-2580-4c82-9211-8132df3b0d0e\",\"trace_id\":\"09717aad-238d-4cba-bb5b-862a63282461\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"58de79f4-3297-45cd-89f9-c714faeafff6\",\"trace_id\":\"fe170de0-d606-44f9-a67f-3302e3ed2c1b\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d6afe42d-7770-49be-b082-cf9b35fdeaa4\",\"trace_id\":\"d6d4649b-f9ae-4790-a57d-08b6484e528c\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1393,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1393,\"provider\":\"google\",\"refreshToken\":\"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1393,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1387,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1387,\"provider\":\"google\",\"refreshToken\":\"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1387,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1348,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1348,\"provider\":\"google\",\"refreshToken\":\"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1348,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1361,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1361,\"provider\":\"google\",\"refreshToken\":\"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1361,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1310,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1310,\"provider\":\"google\",\"refreshToken\":\"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1310,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1333,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1333,\"provider\":\"google\",\"refreshToken\":\"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1333,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1368,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1368,\"provider\":\"google\",\"refreshToken\":\"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1368,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1365,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1365,\"provider\":\"google\",\"refreshToken\":\"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1365,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1364,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1364,\"provider\":\"google\",\"refreshToken\":\"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1364,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1370,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1370,\"provider\":\"office\",\"refreshToken\":\"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:19Z\\\",\\\"trace_id\\\":\\\"b7ca265a-47b5-4006-9b8e-8ff435611100\\\",\\\"correlation_id\\\":\\\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1370,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1202,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1202,\"provider\":\"office\",\"refreshToken\":\"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:20Z\\\",\\\"trace_id\\\":\\\"72a99455-027e-4b60-affc-3b04dcf43600\\\",\\\"correlation_id\\\":\\\"33c2d31c-ab95-4724-b006-99926b48bb15\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1202,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {\"calendar_id\":501} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1300,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1300,\"provider\":\"google\",\"refreshToken\":\"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Account has been deleted\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1300,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1409,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1409,\"provider\":\"google\",\"refreshToken\":\"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1409,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1352,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1352,\"provider\":\"google\",\"refreshToken\":\"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"from\":null,\"to\":null,\"delta\":\"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=\",\"last_sync\":\"2024-12-09 07:12:53\",\"dateMode\":\"daily\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"integration-app\",\"crm_owner\":1695,\"team_id\":3143} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1502,\"provider\":\"google\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"responseBody\":{\"error\":\"unauthorized_client\",\"error_description\":\"Unauthorized\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1352,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1296,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1296,\"provider\":\"office\",\"refreshToken\":\"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"a33076c1-8d97-431a-99f0-85c9524e118b\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"d7ca3f24-5176-4d93-992e-e732ad3d95cf\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:21Z\\\",\\\"trace_id\\\":\\\"34b7cb92-7735-4fb5-9f1a-3fece3240300\\\",\\\"correlation_id\\\":\\\"00801481-2729-48d8-b0a6-638ca82519b5\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1296,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":391,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":391,\"provider\":\"office\",\"refreshToken\":\"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"1ed3a184-61d6-425e-8db3-3531a3000a00\\\",\\\"correlation_id\\\":\\\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":391,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1271,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1271,\"provider\":\"office\",\"refreshToken\":\"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"responseBody\":\"{\\\"error\\\":\\\"invalid_client\\\",\\\"error_description\\\":\\\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\\\",\\\"error_codes\\\":[7000215],\\\"timestamp\\\":\\\"2026-05-07 11:58:22Z\\\",\\\"trace_id\\\":\\\"88bf7d11-d23b-435a-989e-5d0fdac22300\\\",\\\"correlation_id\\\":\\\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\\\",\\\"error_uri\\\":\\\"https://login.microsoftonline.com/error?code=7000215\\\"}\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1271,\"provider\":\"office\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1351,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1351,\"provider\":\"google\",\"refreshToken\":\"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1351,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1366,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1366,\"provider\":\"google\",\"refreshToken\":\"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"responseBody\":{\"error\":\"invalid_grant\",\"error_description\":\"Bad Request\"}} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {\"socialAccountId\":1366,\"provider\":\"google\",\"reason\":\"Flow refresh required.\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":378} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {\"calendar_id\":504} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {\"retrieved_calendars\":31,\"processed_calendars\":3} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"calendar:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"from\":null,\"to\":null,\"delta\":\"CJ_x49O3jpIDEJ_x49O3jpIDGAUgw67KlwMow67KlwM=\",\"last_sync\":\"2026-01-19 07:48:40\",\"dateMode\":\"daily\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Pipedrive] Account not connected for user {\"userId\":\"e6538737-e7b4-455f-a37a-3e79b665a220\",\"account\":{\"Jiminny\\\\Models\\\\SocialAccount\":{\"id\":1116,\"sociable_id\":241,\"provider_user_id\":\"19555731\",\"expires\":1775683749,\"refresh_token_expires\":null,\"provider\":\"pipedrive\",\"state\":\"full-refresh\",\"auth_scope\":\"base,deals:full,activities:full,contacts:full,search:read\",\"retry_after\":null,\"created_at\":\"2023-09-08 09:44:29\",\"updated_at\":\"2026-04-08 22:58:34\"}}} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"pipedrive\",\"crm_owner\":241,\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"pipedrive\",\"team_id\":19} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] CRM disconnected for user so events will not be matched {\"provider\":\"pipedrive\",\"user_id\":241,\"message\":\"Your Pipedrive account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1115,\"provider\":\"google\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Google Calendar] Failed to watch channel for calendar {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.WARNING: [Calendar] Sync failed {\"calendarId\":\"2676cb6d-f86c-427e-bf78-591e388e3c1e\",\"code\":400,\"reason\":\"{\n \\\"error\\\": {\n \\\"errors\\\": [\n {\n \\\"domain\\\": \\\"global\\\",\n \\\"reason\\\": \\\"push.webhookUrlNotHttps\\\",\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n ],\n \\\"code\\\": 400,\n \\\"message\\\": \\\"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\\\"\n }\n}\"} {\"correlation_id\":\"28ebace6-1d2c-4958-a68c-e921751acbb7\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1421,\"provider\":\"office\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:23] local.INFO: [Calendar] Processing sync {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\",\"from\":null,\"to\":null,\"delta\":\"R0usmcdvmMuZCBYV0hguCHhwR3crxfEuMI8zGlf-bMYpCFtdxXvSJWTlnqQvu_jjoOrOYL2VG9rZwFHCERHxGfGEK3CmQX6x8MJG3ZbBXGuVIS6C7u-doY5maMRdsfnrHIAEMJd4Bs_WMfMH4tDJ8j9aul7DHDEJaP7w0PoPPpcoxu4nEk4vk-MolJBEgkSrayEewuBs5JVItUX9lUY2tA.yO2roNQ4Vdm6hBgoutuphGchuzbvsk7aqt5wHfcyeFQ\",\"last_sync\":\"2026-05-06 15:58:35\",\"dateMode\":\"daily\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}\n[2026-05-07 11:58:24] local.INFO: [MS Office Calendar] Skipping delta sync for daily mode {\"calendarId\":\"9e8b1a2c-1a8f-42bd-b161-810fc0baf540\"} {\"correlation_id\":\"b4d64b24-c6bc-4593-9dfd-ad7f191e0806\",\"trace_id\":\"722bdbe4-0b81-4311-b826-613332e6eb21\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5","depth":4,"bounds":{"left":0.48038563,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"120","depth":4,"bounds":{"left":0.49035904,"top":0.17478053,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Console\\Commands;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\nuse InvalidArgumentException;\nuse Jiminny\\Jobs\\AutomatedReports\\RequestGenerateAskJiminnyReportJob;\nuse Jiminny\\Jobs\\AutomatedReports\\SendReportMailJob;\nuse Jiminny\\Jobs\\JobDispatcherInterface;\nuse Jiminny\\Models\\Activity;\nuse Jiminny\\Models\\AutomatedReport;\nuse Jiminny\\Models\\AutomatedReportResult;\nuse Jiminny\\Models\\Team;\nuse Jiminny\\Models\\User;\nuse Jiminny\\Repositories\\AutomatedReportsRepository;\nuse Jiminny\\Services\\Activity\\CrmOwnerResolver;\nuse Jiminny\\Services\\Kiosk\\AutomatedReports\\AutomatedReportsService;\nuse Jiminny\\Services\\UserPilot\\UserPilotClient;\n\n/**\n * Class JiminnyDebugCommand\n *\n * @package Jiminny\\Console\\Commands\n */\nclass JiminnyDebugCommand extends Command\n{\n public const string FREQUENCY_DAILY = 'daily';\n public const string FREQUENCY_WEEKLY = 'weekly';\n public const string FREQUENCY_MONTHLY = 'monthly';\n public const string FREQUENCY_QUARTERLY = 'quarterly';\n public const string FREQUENCY_ONE_OFF = 'one_off';\n protected $signature = 'jiminny:debug';\n\n public function handle(\n JobDispatcherInterface $jobDispatcher,\n AutomatedReportsService $automatedReportsService,\n AutomatedReportsRepository $automatedReportsRepository,\n UserPilotClient $userPilotClient\n ): void {\n $this->rateLimit();\n exit(1);\n\n\n\n $report = AutomatedReport::find(71);\n $last = AutomatedReportResult::query()\n ->where('report_id', $report->getId())\n ->whereIn('status', [AutomatedReportResult::STATUS_DEFAULT, AutomatedReportResult::STATUS_FAILED])\n// ->where('reason', '!=', AutomatedReportResult::REASON_NOT_ENOUGH_ACTIVITIES)\n ->whereDate('created_at', CarbonImmutable::now()->toDateString())\n ->latest()\n ->first();\n\n $this->info(\"Last: {$last->getId()}\");\n\n exit(1);\n\n $user = User::find(143);\n // $count = $automatedReportsRepository->countUserReports($user);\n // $this->info(\"Count: {$count}\");\n // $count = $automatedReportsRepository->countAllUserReports($user);\n // $this->info(\"All count: {$count}\");\n\n $payload = [\n 'report_type' => 'ask_jiminny',\n 'frequency' => 'weekly',\n ];\n $userPilotClient->track($user, 'ask-jiminny-report-generated', $payload);\n\n exit(1);\n\n $now = Carbon::now()->subDay(1);\n $this->info(\"Now: {$now->toDateTimeString()}\");\n $weekStart = Carbon::getWeekStartsAt();\n $this->info(\"Now: {$weekStart}\");\n\n // $from = $now->copy()->previousWeekday()->startOfDay();\n // $to = $now->copy()->previousWeekday()->endOfDay();\n\n // $fromOld = $now->copy()->subWeeks(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subWeek()->startOfWeek();\n // $toNew = $now->copy()->subWeek()->endOfWeek();\n\n // $fromOld = $now->copy()->subMonths(1)->startOfDay();\n // $toOld = $now->copy()->subDay()->endOfDay();\n // $fromNew = $now->copy()->subMonthNoOverflow()->startOfMonth();\n // $toNew = $now->copy()->subMonthNoOverflow()->endOfMonth();\n\n $fromOld = $now->copy()->subMonths(3)->startOfDay();\n $toOld = $now->copy()->subDay()->endOfDay();\n $fromNew = $now->copy()->subQuarterNoOverflow()->startOfQuarter();\n $toNew = $now->copy()->subQuarterNoOverflow()->endOfQuarter();\n\n $this->info(\"From old: {$fromOld->toDateTimeString()}\");\n $this->info(\"To old: {$toOld->toDateTimeString()}\");\n $this->info(\"From new: {$fromNew->toDateTimeString()}\");\n $this->info(\"To new: {$toNew->toDateTimeString()}\");\n\n exit(1);\n\n $report = AutomatedReport::find(71);\n\n $job = new RequestGenerateAskJiminnyReportJob($report->getUuid());\n $jobDispatcher->dispatch($job);\n\n exit(1);\n\n\n // $this->formatDate($jobDispatcher);\n // $this->sendMail($jobDispatcher, $automatedReportsService);\n // $this->crmService();\n\n $this->getPayload($automatedReportsService);\n\n exit(1);\n }\n\n\n\n private function crmService()\n {\n $activity = Activity::find(418141);\n\n $team = Team::find(19);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n $crmService->createTranscriptNotes($activity);\n }\n\n private function sendMail(JobDispatcherInterface $jobDispatcher, AutomatedReportsService $automatedReportsService)\n {\n $reportUuid = '';\n // $report = $automatedReportsService->getReportResult($reportUuid);\n $report = AutomatedReportResult::find(275);\n $validRecipients = $automatedReportsService->getValidRecipientUsers(\n $report->getReport(),\n includeJiminny: true,\n );\n\n $recipient = $validRecipients[0];\n\n $fileName = $automatedReportsService->getReportFileName($report);\n $typeName = $report->getReport()->getCustomName()\n ?? $automatedReportsService->getReportTypeName($report);\n $teamsName = $automatedReportsService->getReportTeamsName($report);\n $periodName = $automatedReportsService->getReportPeriodName($report);\n $s3Path = $automatedReportsService->getMediaPath($report);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$fileName ' . PHP_EOL . print_r($fileName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$typeName ' . PHP_EOL . print_r($typeName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$teamsName ' . PHP_EOL . print_r($teamsName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$periodName ' . PHP_EOL . print_r($periodName, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$s3Path ' . PHP_EOL . print_r($s3Path, true));\n\n $jobDispatcher->dispatch(\n new SendReportMailJob(\n reportUuid: $report->getUuid(),\n s3Path: $s3Path,\n recipientEmail: $recipient['email'],\n recipientName: $recipient['name'] ?? null,\n fileName: $fileName,\n typeName: $typeName,\n teamsName: $teamsName,\n periodName: $periodName,\n isAskJiminny: true,\n )\n );\n\n exit(1);\n }\n\n private function formatDate(JobDispatcherInterface $jobDispatcher): void\n {\n $customName = 'Custom report name';\n // $frequency = self::FREQUENCY_DAILY;\n // $frequency = self::FREQUENCY_WEEKLY;\n $frequency = self::FREQUENCY_MONTHLY;\n // $frequency = self::FREQUENCY_QUARTERLY;\n // $frequency = self::FREQUENCY_ONE_OFF;\n $period = $this->calculateFromAndToDatePeriod($frequency);\n $from = $period['fromDate'];\n $to = $period['toDate'];\n $periodName = $this->formatReportPeriodName($frequency, $from, $to);\n $filenameSuffix = null;\n\n if ($customName) {\n if ($filenameSuffix) {\n $customName .= \" {$filenameSuffix}\";\n }\n\n $result = $this->sanitizeFileName(\"{$customName} - {$periodName}\");\n }\n\n $this->info($result);\n }\n\n public function calculateFromAndToDatePeriod(\n string $frequency,\n ?Carbon $fromDate = null,\n ?Carbon $toDate = null\n ): array {\n if ($frequency === self::FREQUENCY_ONE_OFF) {\n return [\n 'fromDate' => $fromDate,\n 'toDate' => $toDate,\n ];\n }\n\n $now = Carbon::now();\n\n return match ($frequency) {\n self::FREQUENCY_DAILY => [\n 'fromDate' => $now->copy()->subDay()->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_WEEKLY => [\n 'fromDate' => $now->copy()->subWeeks(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_MONTHLY => [\n 'fromDate' => $now->copy()->subMonths(1)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n self::FREQUENCY_QUARTERLY => [\n 'fromDate' => $now->copy()->subMonths(3)->startOfDay(),\n 'toDate' => $now->copy()->subDay()->endOfDay(),\n ],\n default => throw new InvalidArgumentException(\"Unsupported frequency: {$frequency}\"),\n };\n }\n\n private function formatReportPeriodName(string $frequency, Carbon $from, Carbon $to): string\n {\n $fromYear = $from->format('Y');\n $toYear = $to->format('Y');\n $differentYears = $fromYear !== $toYear;\n\n switch ($frequency) {\n case self::FREQUENCY_DAILY:\n return $from->format('j M Y');\n\n case self::FREQUENCY_QUARTERLY:\n // 'Jan-Mar 2025' or 'Nov 2024-Jan 2025' if years differ\n $startMonth = $from->format('M');\n $endMonth = $to->copy()->subMonth();\n $endMonthName = $endMonth->format('M');\n $endMonthYear = $endMonth->format('Y');\n\n if ($differentYears) {\n return \"{$startMonth} {$fromYear} - {$endMonthName} {$endMonthYear}\";\n }\n\n return \"{$startMonth} - {$endMonthName} {$toYear}\";\n\n case self::FREQUENCY_MONTHLY:\n // 'May 2025' - monthly reports are always within the same year\n return $from->format('M Y');\n\n case self::FREQUENCY_WEEKLY:\n // '4 - 8 Aug 2025', '27 Oct - 3 Nov 2025', or '28 Dec 2024 - 3 Jan 2025' if years differ\n $startDay = $from->format('j');\n $endDay = $to->format('j');\n $startMonth = $from->format('M');\n $endMonth = $to->format('M');\n\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n if ($startMonth !== $endMonth) {\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n return \"{$startDay} - {$endDay} {$endMonth} {$toYear}\";\n\n case self::FREQUENCY_ONE_OFF:\n // '2 May-31 May 2025' or '15 Dec 2024-15 Jan 2025' if years differ\n $startDay = $from->format('j');\n $startMonth = $from->format('M');\n $endDay = $to->format('j');\n $endMonth = $to->format('M');\n\n // If same month and year, use a format like '2-31 May 2025'\n if ($startMonth === $endMonth && ! $differentYears) {\n return \"{$startDay} - {$endDay} {$startMonth} {$toYear}\";\n }\n\n // If different years, include both years\n if ($differentYears) {\n return \"{$startDay} {$startMonth} {$fromYear} - {$endDay} {$endMonth} {$toYear}\";\n }\n\n // Same year but different months\n return \"{$startDay} {$startMonth} - {$endDay} {$endMonth} {$toYear}\";\n\n default:\n // Default format for unknown frequencies\n return $from->format('j M Y') . ' - ' . $to->format('j M Y');\n }\n }\n\n public function sanitizeFileName(string $fileName): string\n {\n return str_replace(['/', '\\\\'], '-', $fileName);\n }\n\n private function getPayload(AutomatedReportsService $automatedReportsService)\n {\n $reportResult = AutomatedReportResult::find(269);\n $automatedReport = $reportResult->getReport();\n $activityIds = [1,2,3];\n $payload = $automatedReportsService->getAskJiminnyGenerateReportPayload(\n automatedReport: $automatedReport,\n reportResult: $reportResult,\n activityIds: $activityIds,\n );\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$payload ' . PHP_EOL . print_r($payload, true));\n }\n\n private function rateLimit()\n {\n $team = Team::find(2);\n $config = $team->getCrmConfiguration();\n\n $crmResolver = app(CrmOwnerResolver::class, [\n 'team' => $team,\n 'integrationAdmin' => $team->getOwner(),\n 'providerSlug' => $config->getProviderName(),\n ]);\n\n $crmService = $crmResolver->prepareCrmService();\n\n for ($i = 0 ; $i < 120; $i++) {\n if ($i % 10 === 0) {\n $this->info(\"Syncing opportunity {$i}\");\n }\n $crmService->syncOpportunity('374720564');\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3140226296908787412
|
8279706133930369215
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:57:59] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"9483899e-8d67-4eff-a567-172ccbb6692d","trace_id":"45a4883e-acde-4fea-8747-c841e01fc14d"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"e54ecc5e-4a40-4886-96fe-57b3cc9456f9","trace_id":"2ae60d35-0e26-4e6b-8d64-e707af92838b"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"4655b2a9-a64d-4549-a2bc-6ba80f5dcad6","trace_id":"bb28f335-a2b9-448e-8cee-3803996984af"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring start {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:08] local.NOTICE: Monitoring end {"correlation_id":"128b1d8a-a9c3-4e0a-8298-4a5b7c9f2ad8","trace_id":"4db8f0e6-14c2-48c7-a933-6e9db4cdcbcf"}
[2026-05-07 11:58:09] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a0d5e4a9-21d0-43e1-bbd2-8d50fc107985","trace_id":"d5a0e82c-2873-4f8f-8a63-36dc2cd32295"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:11] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"b9e243bc-2580-4c82-9211-8132df3b0d0e","trace_id":"09717aad-238d-4cba-bb5b-862a63282461"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:56:00, 2026-05-07 11:58:00] {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:13] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"58de79f4-3297-45cd-89f9-c714faeafff6","trace_id":"fe170de0-d606-44f9-a67f-3302e3ed2c1b"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"calendar:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:15] local.NOTICE: Calendar sync start {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"d6afe42d-7770-49be-b082-cf9b35fdeaa4","trace_id":"d6d4649b-f9ae-4790-a57d-08b6484e528c"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1393,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1393,"provider":"google","refreshToken":"5aa7e2d96b53201cd16fca5d2e4ef3ad03320971fc064781d18aee3ae7b99fbf","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1393,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1387,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1387,"provider":"google","refreshToken":"8157ac6de94842937194009e9c50e459253600f799dacf6a40755ffdbeb5bba6","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1387,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1348,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1348,"provider":"google","refreshToken":"9e7d13d3032d0cb1b79d8e95aef01383e8e91eb52ff8ee960c8a0b6b95cd8c73","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1348,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1361,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:16] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1361,"provider":"google","refreshToken":"6c843da199c2b9907445329304fcc4ec5057a4ee748d8299641764395c08e1fd","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1361,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1310,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1310,"provider":"google","refreshToken":"e34818922c2830a660813a63f6169a4a9a992ae2cccd7dc8dd7796cfdb470ef1","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1310,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1333,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1333,"provider":"google","refreshToken":"6c902986546d8e8da1dc539b046cdc1d458f519acc972e5b5f1d6a1a295165e0","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1333,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1368,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1368,"provider":"google","refreshToken":"d2f128898ff8543bd16b69cfae37896ab85119b0f5ed2b431d739593bb600333","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1368,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1365,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:17] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1365,"provider":"google","refreshToken":"7676e4a9afcd082b413248ab5ec6e487021fec6a9bdf315860a59cefad9caad8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1365,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1364,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1364,"provider":"google","refreshToken":"dd5882ebce76e645292ce33ae74238abbb77c0a4ecc6a2bfe723cad82e72ba8e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1364,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1370,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:18] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1370,"provider":"office","refreshToken":"b7ee8035306d0043cea6e00e7c4fe14f745e44074a1194db62a31cdf8b70af3e","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: b7ca265a-47b5-4006-9b8e-8ff435611100 Correlation ID: 39d6fe0a-44ed-4dc0-8dc5-1af7efecf763 Timestamp: 2026-05-07 11:58:19Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:19Z\",\"trace_id\":\"b7ca265a-47b5-4006-9b8e-8ff435611100\",\"correlation_id\":\"39d6fe0a-44ed-4dc0-8dc5-1af7efecf763\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1370,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1202,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:19] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1202,"provider":"office","refreshToken":"b458799ccc29b21a6e2eb5260fdb63e49ccba21bf942a3973fb63799bd7f0afe","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 72a99455-027e-4b60-affc-3b04dcf43600 Correlation ID: 33c2d31c-ab95-4724-b006-99926b48bb15 Timestamp: 2026-05-07 11:58:20Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:20Z\",\"trace_id\":\"72a99455-027e-4b60-affc-3b04dcf43600\",\"correlation_id\":\"33c2d31c-ab95-4724-b006-99926b48bb15\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1202,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: Calendar sync job dispatched {"calendar_id":501} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1300,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1300,"provider":"google","refreshToken":"4b811db0725fd9602a95943519a7da935e2a5065da7d9ebfcb170752e3e1ddb8","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Account has been deleted"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1300,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1409,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1409,"provider":"google","refreshToken":"e2a3f2d06894894eed1ee87d9db1ace77d4d42ee6e1288a8940ad2c10333b0c4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1409,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:20] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1352,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1352,"provider":"google","refreshToken":"dd4b16b00fdc1216da6b717c02338c073636e29162826b2de6db3f064fc029eb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Calendar] Processing sync {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","from":null,"to":null,"delta":"CIiFh8TP44kDEIiFh8TP44kDGAUgkZvkzgIokZvkzgI=","last_sync":"2024-12-09 07:12:53","dateMode":"daily"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"integration-app","crm_owner":1695,"team_id":3143} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1502,"provider":"google"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","responseBody":{"error":"unauthorized_client","error_description":"Unauthorized"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1352,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1296,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1296,"provider":"office","refreshToken":"011ae723c9d800c674e0b4be76f49fc046dac7d501b66c59ef0d9549cfa56ae5","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [Google Calendar] Failed to watch channel for calendar {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.WARNING: [Calendar] Sync failed {"calendarId":"a33076c1-8d97-431a-99f0-85c9524e118b","code":400,"reason":"{
\"error\": {
\"errors\": [
{
\"domain\": \"global\",
\"reason\": \"push.webhookUrlNotHttps\",
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
],
\"code\": 400,
\"message\": \"WebHook callback must be HTTPS: /webhook/calendar/google?resourceType=event\"
}
}"} {"correlation_id":"d7ca3f24-5176-4d93-992e-e732ad3d95cf","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 34b7cb92-7735-4fb5-9f1a-3fece3240300 Correlation ID: 00801481-2729-48d8-b0a6-638ca82519b5 Timestamp: 2026-05-07 11:58:21Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:21Z\",\"trace_id\":\"34b7cb92-7735-4fb5-9f1a-3fece3240300\",\"correlation_id\":\"00801481-2729-48d8-b0a6-638ca82519b5\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1296,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":391,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:21] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":391,"provider":"office","refreshToken":"00045eebae0f39b34887c6d53f92ae78064f7145e1f4b67754aebd03cfb2d881","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 1ed3a184-61d6-425e-8db3-3531a3000a00 Correlation ID: 8c636f14-3695-4ffc-bd9f-90f3e9591b6e Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"1ed3a184-61d6-425e-8db3-3531a3000a00\",\"correlation_id\":\"8c636f14-3695-4ffc-bd9f-90f3e9591b6e\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":391,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1271,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1271,"provider":"office","refreshToken":"118cde2c06993147b07ccaec4cbcd5026a819dea6c71081166a492933e392afb","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","responseBody":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app 'bbcbb2ef-6200-4fae-82bd-d81f5dd738da'. Trace ID: 88bf7d11-d23b-435a-989e-5d0fdac22300 Correlation ID: 87a6d2fa-b029-43db-a53e-8d58dfb52e44 Timestamp: 2026-05-07 11:58:22Z\",\"error_codes\":[7000215],\"timestamp\":\"2026-05-07 11:58:22Z\",\"trace_id\":\"88bf7d11-d23b-435a-989e-5d0fdac22300\",\"correlation_id\":\"87a6d2fa-b029-43db-a53e-8d58dfb52e44\",\"error_uri\":\"https://login.microsoftonline.com/error?code=7000215\"}"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1271,"provider":"office","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1351,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:22] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1351,"provider":"google","refreshToken":"4271d15b9e60a606439caddc68337f783e472c85b03dacff14d1b6dfded9051c","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1351,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1366,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1366,"provider":"google","refreshToken":"ae21385059b2eebfd43f68aecd56eccd702a1aabb6598f1f7ab594ed8af491b4","state":"full-refresh"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","responseBody":{"error":"invalid_grant","error_description":"Bad Request"}} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.ERROR: [SocialAccountService] Failed to refresh token {"socialAccountId":1366,"provider":"google","reason":"Flow refresh required."} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1115,"provider":"google"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":378} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1421,"provider":"office"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: Calendar sync job dispatched {"calendar_id":504} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.NOTICE: Calendar sync end {"retrieved_calendars":31,"processed_calendars":3} {"correlation_id":"1a7f6cd8-43ba-4a5a-bb4c-8e0796e2a398","trace_id":"722bdbe4-0b81-4311-b826-613332e6eb21"}
[2026-05-07 11:58:23] local.INFO: ...
|
3060
|
NULL
|
NULL
|
NULL
|
|
3097
|
121
|
5
|
2026-05-07T12:00:09.725669+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155209725_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:59:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"997b55b4-ed52-4426-95b2-3d79f48278ae","trace_id":"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb"}
[2026-05-07 11:59:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"997b55b4-ed52-4426-95b2-3d79f48278ae","trace_id":"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb"}
[2026-05-07 11:59:13] local.NOTICE: Monitoring start {"correlation_id":"1f069a13-4342-40ed-bf79-1472c9c60637","trace_id":"1c2564a5-1d98-4061-819a-060f3143e672"}
[2026-05-07 11:59:13] local.NOTICE: Monitoring end {"correlation_id":"1f069a13-4342-40ed-bf79-1472c9c60637","trace_id":"1c2564a5-1d98-4061-819a-060f3143e672"}
[2026-05-07 11:59:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"92fadd4f-de00-4eae-8e71-26517f0e405c","trace_id":"034b1cf6-05b1-455d-9d58-e7286ec06e25"}
[2026-05-07 11:59:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"92fadd4f-de00-4eae-8e71-26517f0e405c","trace_id":"034b1cf6-05b1-455d-9d58-e7286ec06e25"}
[2026-05-07 11:59:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 11:59:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"997b55b4-ed52-4426-95b2-3d79f48278ae\",\"trace_id\":\"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb\"}\n[2026-05-07 11:59:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"997b55b4-ed52-4426-95b2-3d79f48278ae\",\"trace_id\":\"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb\"}\n[2026-05-07 11:59:13] local.NOTICE: Monitoring start {\"correlation_id\":\"1f069a13-4342-40ed-bf79-1472c9c60637\",\"trace_id\":\"1c2564a5-1d98-4061-819a-060f3143e672\"}\n[2026-05-07 11:59:13] local.NOTICE: Monitoring end {\"correlation_id\":\"1f069a13-4342-40ed-bf79-1472c9c60637\",\"trace_id\":\"1c2564a5-1d98-4061-819a-060f3143e672\"}\n[2026-05-07 11:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92fadd4f-de00-4eae-8e71-26517f0e405c\",\"trace_id\":\"034b1cf6-05b1-455d-9d58-e7286ec06e25\"}\n[2026-05-07 11:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92fadd4f-de00-4eae-8e71-26517f0e405c\",\"trace_id\":\"034b1cf6-05b1-455d-9d58-e7286ec06e25\"}\n[2026-05-07 11:59:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}","depth":4,"on_screen":true,"value":"[2026-05-07 11:59:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:07] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"3cb37764-b6ec-4d4c-85b3-298d24411fec\",\"trace_id\":\"1387c33f-5f58-4299-a3da-9c3ad7e240fe\"}\n[2026-05-07 11:59:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"997b55b4-ed52-4426-95b2-3d79f48278ae\",\"trace_id\":\"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb\"}\n[2026-05-07 11:59:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"997b55b4-ed52-4426-95b2-3d79f48278ae\",\"trace_id\":\"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb\"}\n[2026-05-07 11:59:13] local.NOTICE: Monitoring start {\"correlation_id\":\"1f069a13-4342-40ed-bf79-1472c9c60637\",\"trace_id\":\"1c2564a5-1d98-4061-819a-060f3143e672\"}\n[2026-05-07 11:59:13] local.NOTICE: Monitoring end {\"correlation_id\":\"1f069a13-4342-40ed-bf79-1472c9c60637\",\"trace_id\":\"1c2564a5-1d98-4061-819a-060f3143e672\"}\n[2026-05-07 11:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"92fadd4f-de00-4eae-8e71-26517f0e405c\",\"trace_id\":\"034b1cf6-05b1-455d-9d58-e7286ec06e25\"}\n[2026-05-07 11:59:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"92fadd4f-de00-4eae-8e71-26517f0e405c\",\"trace_id\":\"034b1cf6-05b1-455d-9d58-e7286ec06e25\"}\n[2026-05-07 11:59:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}\n[2026-05-07 11:59:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc\",\"trace_id\":\"a7cdd06b-a602-49f9-a0f7-24736d4d641a\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1402299039883586566
|
6378759383152203876
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 11:59:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:07] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:07] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"3cb37764-b6ec-4d4c-85b3-298d24411fec","trace_id":"1387c33f-5f58-4299-a3da-9c3ad7e240fe"}
[2026-05-07 11:59:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"997b55b4-ed52-4426-95b2-3d79f48278ae","trace_id":"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb"}
[2026-05-07 11:59:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"997b55b4-ed52-4426-95b2-3d79f48278ae","trace_id":"9a0814b7-e0ae-4f6d-ad98-2979c51e16cb"}
[2026-05-07 11:59:13] local.NOTICE: Monitoring start {"correlation_id":"1f069a13-4342-40ed-bf79-1472c9c60637","trace_id":"1c2564a5-1d98-4061-819a-060f3143e672"}
[2026-05-07 11:59:13] local.NOTICE: Monitoring end {"correlation_id":"1f069a13-4342-40ed-bf79-1472c9c60637","trace_id":"1c2564a5-1d98-4061-819a-060f3143e672"}
[2026-05-07 11:59:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"92fadd4f-de00-4eae-8e71-26517f0e405c","trace_id":"034b1cf6-05b1-455d-9d58-e7286ec06e25"}
[2026-05-07 11:59:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"92fadd4f-de00-4eae-8e71-26517f0e405c","trace_id":"034b1cf6-05b1-455d-9d58-e7286ec06e25"}
[2026-05-07 11:59:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
[2026-05-07 11:59:17] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"2bbdc0e4-afb2-4fa9-bbf7-b67fa2ca32cc","trace_id":"a7cdd06b-a602-49f9-a0f7-24736d4d641a"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
3105
|
121
|
10
|
2026-05-07T12:00:41.433709+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155241433_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5853045421951233131
|
6630820224796596324
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3103
|
NULL
|
NULL
|
NULL
|
|
3106
|
122
|
8
|
2026-05-07T12:00:41.514432+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155241514_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:55","to":"12:00"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:50","to":"01:55"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.034242023,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.8081782,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"bounds":{"left":0.8234708,"top":0.019952115,"width":0.09208777,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:55\",\"to\":\"12:00\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:50\",\"to\":\"01:55\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}","depth":4,"bounds":{"left":0.52859044,"top":0.0726257,"width":0.47140956,"height":0.9273743},"on_screen":true,"value":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:55\",\"to\":\"12:00\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:50\",\"to\":\"01:55\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.4820479,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"bounds":{"left":0.49202126,"top":0.17478053,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.5043218,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.51396275,"top":0.17318435,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.5212766,"top":0.17318435,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1292249119510463382
|
6666849030405494892
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:55","to":"12:00"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:50","to":"01:55"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
Sync Changes
Hide This Notification
Code changed:
Hide
2
68
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot;
use HubSpot\Client\Crm\Deals\ApiException as DealApiException;
use HubSpot\Client\Crm\Contacts\ApiException as ContactApiException;
use HubSpot\Client\Crm\Companies\ApiException as CompanyApiException;
use HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectWithAssociations as ContactsWithAssociations;
use HubSpot\Client\Crm\Companies\Model\SimplePublicObjectWithAssociations as CompaniesWithAssociations;
use HubSpot\Client\Crm\Deals\Model\SimplePublicObjectWithAssociations as DealWithAssociations;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectInput;
use HubSpot\Client\Crm\Objects\Model\SimplePublicObjectWithAssociations as ObjectWithAssociations;
use HubSpot\Client\Crm\Pipelines\Model\Error;
use HubSpot\Client\Crm\Pipelines\Model\PipelineStage;
use HubSpot\Client\Crm\Properties\Model\Property;
use HubSpot\Discovery\Discovery;
use Jiminny\Component\Utility\Service\ProviderRateLimiter;
use Jiminny\Exceptions\CrmException;
use Jiminny\Exceptions\RateLimitException;
use Jiminny\Exceptions\SocialAccountTokenInvalidException;
use Jiminny\Jobs\Crm\NoteObject;
use Jiminny\Models\Crm\Field;
use Jiminny\Services\Crm\BaseClient;
use Jiminny\Services\Crm\Hubspot\DTO\Response\Owner;
use Jiminny\Services\SocialAccountService;
use SevenShores\Hubspot\Exceptions\BadRequest;
use SevenShores\Hubspot\Exceptions\HubspotException;
use SevenShores\Hubspot\Factory;
use SevenShores\Hubspot\Http\Response;
use Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService;
use Throwable;
/**
* @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
);
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'email' => $email,
'reason' => $e->getMessage(),
]);
return [];
}
}
/**
* @throws CrmException
*/
public function fetchProperty(string $objectType, string $propertyId): Property
{
$result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);
if (! $result instanceof Property) {
$this->log->error('[Hubspot] Failed to fetch property', [
'object_type' => $objectType,
'property_id' => $propertyId,
'reason' => $result->getMessage(),
]);
throw new CrmException('Failed to fetch property');
}
return $result;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchPropertyOptions(string $objectType, string $propertyId): array
{
/** @var array<CrmFieldOption> */
return $this->fetchProperty($objectType, $propertyId)->getOptions();
}
/**
* @return array<array{id:string, label:string, deleted:bool}>
*/
public function fetchCallDispositions(): array
{
/** @var Response $response */
$response = $this->getInstance()->engagements()->getCallDispositions();
/**
* @var array<array{
* id:string,
* label:string,
* deleted: bool
* }>
*/
return $response->toArray();
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityPipelineStages(): array
{
$stages = [];
$apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');
if ($apiResponse instanceof Error) {
$this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $apiResponse->getMessage(),
]);
return [];
}
foreach ($apiResponse->getResults() as $pipeline) {
$pipelineStages = array_map(
static function (PipelineStage $stage) {
return [
'id' => $stage->getId(),
'label' => $stage->getLabel(),
];
},
$pipeline->getStages()
);
$stages = array_merge($stages, $pipelineStages);
}
return $stages;
}
public function fetchOpportunityPipelines(): array
{
$pipelines = [];
try {
$apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');
} catch (\Exception $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [
'reason' => $e->getMessage(),
]);
return [];
}
$response = $apiResponse->toArray();
foreach ($response['results'] as $pipeline) {
$pipelines[] = [
'id' => $pipeline['id'],
'label' => $pipeline['label'],
];
}
return $pipelines;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchMeetingOutcomeFieldOptions(Field $field): array
{
return $field->getCrmProviderId() === 'meetingOutcome'
? $this->fetchMeetingOutcomeTypes()
: $this->fetchCallActivityTypes();
}
public function fetchMeetingOutcomeTypes(): array
{
return $this->extractMeetingTypeOptions(
'[URL_WITH_CREDENTIALS] Response $response */
$response = $this->getInstance()
->getClient()
->request('GET', $endpoint);
/**
* @var array<array{
* value: string,
* label: string,
* displayOrder: int
* }> $optionData
*/
$optionData = $response->toArray()['options'] ?? [];
$options = [];
foreach ($optionData as $item) {
$options[] = [
'id' => $item['value'],
'value' => $item['value'],
'label' => $item['label'],
'display_order' => $item['displayOrder'],
];
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchDispositionFieldOptions(): array
{
$options = [];
$dispositions = $this->fetchCallDispositions();
foreach ($dispositions as $disposition) {
if ($disposition['deleted'] !== false) {
continue;
}
$option['value'] = $disposition['id'];
$option['id'] = $disposition['id'];
$option['label'] = $disposition['label'];
$options[] = $option;
}
return $options;
}
/**
* @return array<CrmFieldOption>
*/
public function fetchOpportunityFieldOptions(Field $field): array
{
if ($field->isStageField()) {
return $this->fetchOpportunityPipelineStages();
}
if ($field->isPipelineField()) {
return $this->fetchOpportunityPipelines();
}
return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)
{
$endpoint = self::BASE_URL . $endpoint;
if ($method === 'GET') {
$response = $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
$response = $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
$max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // "110"
$remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // "109"
$interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // "10000"
$body = json_decode((string) $response->getBody(), true);
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));
\Illuminate\Support\Facades\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));
return $response;
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function createMeeting(array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings';
return $this->makeRequest($endpoint, 'POST', $payload);
}
/**
* @throws BadRequest
* @throws HubspotException
*/
public function updateMeeting(string $meetingId, array $payload): Response
{
$endpoint = '/crm/v3/objects/meetings/' . $meetingId;
return $this->makeRequest($endpoint, 'PATCH', $payload);
}
/**
* @throws \Exception
*/
public function createNote(
string $body,
string $ownerId,
int $timestamp,
string $objectId,
NoteObject $noteObject
): ?string {
try {
$noteInput = new SimplePublicObjectInput([
'properties' => [
'hs_note_body' => $body,
'hubspot_owner_id' => $ownerId,
'hs_timestamp' => $timestamp,
],
]);
// Create note
$note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);
$this->getNewInstance()->crm()->objects()->associationsApi()->create(
'note',
$note->getId(),
$this->getNoteObject($noteObject),
$objectId,
$this->getNoteAssociationType($noteObject),
);
return $note->getId();
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to create note', [
'objectId' => $objectId,
'noteObject' => $noteObject->getObjectType(),
'reason' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return null;
}
public function updateEngagement(string $objectId, array $engagement, array $metadata): void
{
$this->getInstance()->engagements()->update($objectId, $engagement, $metadata);
}
public function getEngagementData(string $engagementId): array
{
$engagement = $this->getInstance()->engagements()->get($engagementId);
return $engagement->toArray();
}
public function createEngagement(array $engagement, array $associations, array $metadata): Response
{
return $this->getInstance()
->engagements()
->create($engagement, $associations, $metadata);
}
public function isUnauthorizedException(\Exception $e): bool
{
// Check for specific HubSpot API exception types first
if ($e instanceof BadRequest) {
// BadRequest can contain 401 status codes
return $e->getCode() === 401;
}
// Check for HTTP client exceptions with status codes
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$response = $e->getResponse();
if ($response !== null) {
return $response->getStatusCode() === 401;
}
}
// Check for Guzzle HTTP exceptions
if ($e instanceof \GuzzleHttp\Exception\ClientException) {
return $e->getCode() === 401;
}
// Fallback to string matching as last resort, but be more specific
$message = strtolower($e->getMessage());
return str_contains($message, '401 unauthorized') ||
str_contains($message, 'http 401') ||
str_contains($message, 'status code 401') ||
(preg_match('/\b401\b/', $message) && str_contains($message, 'unauthorized'));
}
/**
* Validates and refreshes the access token if needed before API requests.
* This ensures long-running processes don't fail due to token expiration.
*
* @throws SocialAccountTokenInvalidException
*/
public function ensureValidToken(): void
{
if ($this->oauthAccount === null) {
return;
}
$newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);
if ($newToken !== null) {
$this->accessToken = $newToken;
}
}
public function getConfig()
{
return $this->config;
}
// returns only active (archived=false)
public function getOwners(): array
{
return $this->getNewInstance()->crm()->owners()->getAll();
}
/**
* @param bool $archived
*
* @return array<Owner>|[]
*/
public function getOwnersArchived(bool $archived = true): array
{
$endpoint = '/crm/v3/owners';
$queryParams = [
'archived' => $archived ? 'true' : 'false',
];
$queryString = http_build_query($queryParams);
$owners = [];
try {
$response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);
$responseData = $response?->toArray();
foreach ($responseData['results'] as $result) {
try {
$owners[] = Owner::create($result);
} catch (Throwable $e) {
$this->log->error('[HubSpot] Failed to process owner data', [
'result' => $result,
'error' => $e->getMessage(),
]);
continue;
}
}
} catch (Throwable $e) {
$this->log->error('HubSpot] Failed to fetch owners', [
'archived' => $archived,
'error' => $e->getMessage(),
]);
return [];
}
return $owners;
}
public function getMeeting(string $engagementId): ObjectWithAssociations
{
return $this->getNewInstance()->crm()->objects()->basicApi()
->getById('meeting', $engagementId, null, 'contact,company,deal');
}
public function deleteEngagement(string $engagementId): void
{
$this->getInstance()->engagements()->delete((int) $engagementId);
}
public function getAssociationsData(array $ids, string $fromObject, string $toObject): array
{
$associationData = [];
$idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);
foreach ($idChunks as $idChunk) {
try {
$batchInput = new \HubSpot\Client\Crm\Associations\Model\BatchInputPublicObjectId();
$batchInput->setInputs(array_map(function ($id) {
$publicObjectId = new \HubSpot\Client\Crm\Associations\Model\PublicObjectId();
$publicObjectId->setId($id);
return $publicObjectId;
}, $idChunk));
$associatedObjectsData = $this
->getNewInstance()
->crm()
->associations()
->batchApi()
->read($fromObject, $toObject, $batchInput);
if ($associatedObjectsData instanceof \HubSpot\Client\Crm\Associations\Model\BatchResponsePublicAssociationMulti) {
foreach ($associatedObjectsData->getResults() as $association) {
$from = $association->getFrom()->getId();
$toAssociations = $association->getTo();
if (! empty($toAssociations)) {
$associationData[$from] = array_map(function ($item) {
return $item->getId();
}, $toAssociations);
}
}
}
} catch (\Exception $e) {
$this->log->error('[Hubspot] Failed to fetch associations', [
'from_object' => $fromObject,
'to_object' => $toObject,
'reason' => $e->getMessage(),
]);
}
}
return $associationData;
}
/**
* @throws \Exception
*/
private function getNoteAssociationType(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'note_to_deal',
NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it
NoteObject::Account => 'note_to_company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
/**
* @throws \Exception
*/
private function getNoteObject(NoteObject $noteObject): string
{
return match($noteObject) {
NoteObject::Opportunity => 'deal',
NoteObject::Lead, NoteObject::Contact => 'contact',
NoteObject::Account => 'company',
NoteObject::Call, NoteObject::Event => throw new \Exception('Not supported'),
};
}
public function addAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/create";
return $this->makeRequest($endpoint, 'POST', $payload);
}
public function removeAssociations(string $objectType, string $associationType, array $payload): Response
{
$endpoint = "/crm/v4/associations/$objectType/$associationType/batch/archive";
return $this->makeRequest($endpoint, 'POST', $payload);
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
3104
|
NULL
|
NULL
|
NULL
|
|
3107
|
121
|
11
|
2026-05-07T12:01:11.484940+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-07/1778 /Users/lukas/.screenpipe/data/data/2026-05-07/1778155271484_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:55","to":"12:00"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:50","to":"01:55"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8242f028-d290-43e7-80fd-3b4ef698dfd8","trace_id":"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc6c3431-7f7c-44e2-af0c-f0d95b84155f","trace_id":"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc6c3431-7f7c-44e2-af0c-f0d95b84155f","trace_id":"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027"}
[2026-05-07 12:00:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8242f028-d290-43e7-80fd-3b4ef698dfd8","trace_id":"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:02:47.036006Z"} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"master, menu","depth":5,"on_screen":true,"help_text":"Git Branch: master","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AskJiminnyReportActivityServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AskJiminnyReportActivityServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:55\",\"to\":\"12:00\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:50\",\"to\":\"01:55\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8242f028-d290-43e7-80fd-3b4ef698dfd8\",\"trace_id\":\"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc6c3431-7f7c-44e2-af0c-f0d95b84155f\",\"trace_id\":\"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc6c3431-7f7c-44e2-af0c-f0d95b84155f\",\"trace_id\":\"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027\"}\n[2026-05-07 12:00:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8242f028-d290-43e7-80fd-3b4ef698dfd8\",\"trace_id\":\"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:02:47.036006Z\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7139e632-b69f-47ac-89e2-8523a2941bfb\",\"trace_id\":\"8c4db60c-5f2f-4d7e-8912-f5f962bb8c21\"}\n[2026-05-07 12:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7139e632-b69f-47ac-89e2-8523a2941bfb\",\"trace_id\":\"8c4db60c-5f2f-4d7e-8912-f5f962bb8c21\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812306,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812307,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812308,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812309,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812310,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812311,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.ALERT: [SyncActivity] Failed {\"import_id\":812306,\"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\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.ALERT: [SyncActivity] Failed {\"import_id\":812307,\"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\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.ALERT: [SyncActivity] Failed {\"import_id\":812308,\"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\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e81867ba-0ed9-4b46-a312-df3c4e3e2862\",\"trace_id\":\"7d672488-f590-4c10-9e01-7ac33ca8b1f8\"}\n[2026-05-07 12:00:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e81867ba-0ed9-4b46-a312-df3c4e3e2862\",\"trace_id\":\"7d672488-f590-4c10-9e01-7ac33ca8b1f8\"}\n[2026-05-07 12:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812309,\"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\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812310,\"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\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] Start {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:44:00\",\"to\":\"2026-05-07 12:00:00\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] End {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] Memory usage {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27274160,\"memory_real_usage\":67108864,\"pid\":22516} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fc38a8e-8b59-44ed-825c-da06adf13d8f\",\"trace_id\":\"cf0e4321-94f7-4e34-b1ba-99e187dd4b79\"}\n[2026-05-07 12:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fc38a8e-8b59-44ed-825c-da06adf13d8f\",\"trace_id\":\"cf0e4321-94f7-4e34-b1ba-99e187dd4b79\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"943aa5a3-32b8-4df0-9909-880604fb7b76\",\"trace_id\":\"68999115-111e-4ed4-891e-40f5f21af15c\"}\n[2026-05-07 12:01:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"943aa5a3-32b8-4df0-9909-880604fb7b76\",\"trace_id\":\"68999115-111e-4ed4-891e-40f5f21af15c\"}\n[2026-05-07 12:01:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ca85e588-6ce8-47fe-9c6d-0945e0af4432\",\"trace_id\":\"40993546-24df-4bd5-beab-80c8c4ff63e7\"}\n[2026-05-07 12:01:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ca85e588-6ce8-47fe-9c6d-0945e0af4432\",\"trace_id\":\"40993546-24df-4bd5-beab-80c8c4ff63e7\"}\n[2026-05-07 12:01:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4f5d311-6031-4623-b6cc-3b40d9d09514\",\"trace_id\":\"80ff8918-fea3-4354-be93-1b8a26c76b43\"}\n[2026-05-07 12:01:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4f5d311-6031-4623-b6cc-3b40d9d09514\",\"trace_id\":\"80ff8918-fea3-4354-be93-1b8a26c76b43\"}","depth":4,"on_screen":true,"value":"[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ba54f876-ed51-46c4-a424-40061240febe\",\"trace_id\":\"24502183-c787-4bf5-a0f4-8484084c4890\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9bb14dd3-f09c-4c32-b735-8e025612a434\",\"trace_id\":\"d7467977-684c-4e49-a13f-29131bdeef1d\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3b542290-d085-46f5-89f3-79d3c32429d9\",\"trace_id\":\"042a3c0c-bd79-421e-bb57-e7c54deff710\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring start {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:17] local.NOTICE: Monitoring end {\"correlation_id\":\"12ab3a43-244a-440b-8222-34d39fa7a1dd\",\"trace_id\":\"1038042e-bec6-44e1-96a5-7981edea9c3b\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76\",\"trace_id\":\"ac7407b5-6e70-4bbe-b609-56212966ac0c\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"a7bdf522-3947-4e45-b2f1-29d0452e5c7b\",\"trace_id\":\"d1d2f5f1-838b-4cd9-b426-6df86f039c7e\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"57548e63-f690-4b40-8fb9-c5ef931ba709\",\"trace_id\":\"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97\",\"trace_id\":\"7662e098-2dcb-4dc5-b211-4a2c49407f21\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"10879f07-6573-412f-bdd6-561ce314a532\",\"trace_id\":\"4399b7be-872f-4fef-aaa0-83288d53f661\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:29] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43ec96a4-b11b-4535-97c9-c8fe165fec03\",\"trace_id\":\"51799249-ffcb-49d5-af3e-20e336cb7579\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:35] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7171c814-99c9-445d-b3b1-17e0bf41d357\",\"trace_id\":\"78628f1b-baa0-4375-95cc-071512c1b0ea\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"11:55\",\"to\":\"12:00\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"01:50\",\"to\":\"01:55\"} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:38] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf\",\"trace_id\":\"19fe5840-6afe-4d92-abcd-8301e4181d63\"}\n[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] 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\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"056110f4-1889-42f3-b498-9fe41f3478b7\",\"trace_id\":\"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"8242f028-d290-43e7-80fd-3b4ef698dfd8\",\"trace_id\":\"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"cc6c3431-7f7c-44e2-af0c-f0d95b84155f\",\"trace_id\":\"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027\"}\n[2026-05-07 12:00:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"cc6c3431-7f7c-44e2-af0c-f0d95b84155f\",\"trace_id\":\"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027\"}\n[2026-05-07 12:00:47] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"8242f028-d290-43e7-80fd-3b4ef698dfd8\",\"trace_id\":\"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-07T12:02:47.036006Z\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7139e632-b69f-47ac-89e2-8523a2941bfb\",\"trace_id\":\"8c4db60c-5f2f-4d7e-8912-f5f962bb8c21\"}\n[2026-05-07 12:00:49] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7139e632-b69f-47ac-89e2-8523a2941bfb\",\"trace_id\":\"8c4db60c-5f2f-4d7e-8912-f5f962bb8c21\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812306,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812307,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812308,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812309,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812310,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Dispatching activity sync job {\"import_id\":812311,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"7ab9beda-abe2-40ff-92c0-eb383313cb57\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.ALERT: [SyncActivity] Failed {\"import_id\":812306,\"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\":\"a7f4f570-f190-42d9-8250-7eb64b0a3875\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:53] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.ALERT: [SyncActivity] Failed {\"import_id\":812307,\"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\":\"11de8d26-f611-4141-be7a-a3c0cb135a29\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.ALERT: [SyncActivity] Failed {\"import_id\":812308,\"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\":\"d8f4d0f9-a5e0-4d52-8880-e8e447544b60\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e81867ba-0ed9-4b46-a312-df3c4e3e2862\",\"trace_id\":\"7d672488-f590-4c10-9e01-7ac33ca8b1f8\"}\n[2026-05-07 12:00:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e81867ba-0ed9-4b46-a312-df3c4e3e2862\",\"trace_id\":\"7d672488-f590-4c10-9e01-7ac33ca8b1f8\"}\n[2026-05-07 12:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812309,\"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\":\"f34333f4-e90b-4bb0-8069-5e52804e788e\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.ALERT: [SyncActivity] Failed {\"import_id\":812310,\"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\":\"2d5d8639-8370-46d3-94f7-b88de3f92ad8\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] Start {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-07 11:44:00\",\"to\":\"2026-05-07 12:00:00\"} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] End {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:55] local.INFO: [SyncActivity] Memory usage {\"import_id\":812311,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":27274160,\"memory_real_usage\":67108864,\"pid\":22516} {\"correlation_id\":\"215a5171-7a4f-42a1-98fd-2e1bd1f5b2a0\",\"trace_id\":\"73f95671-2f12-43b3-a94f-1b28e0f40840\"}\n[2026-05-07 12:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"9fc38a8e-8b59-44ed-825c-da06adf13d8f\",\"trace_id\":\"cf0e4321-94f7-4e34-b1ba-99e187dd4b79\"}\n[2026-05-07 12:00:56] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-stuck\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"9fc38a8e-8b59-44ed-825c-da06adf13d8f\",\"trace_id\":\"cf0e4321-94f7-4e34-b1ba-99e187dd4b79\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:00:57] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"1d86b28e-338e-4a33-a600-6b5673291da5\",\"trace_id\":\"f9f10d27-0739-4645-8e09-517060c40a4c\"}\n[2026-05-07 12:01:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"943aa5a3-32b8-4df0-9909-880604fb7b76\",\"trace_id\":\"68999115-111e-4ed4-891e-40f5f21af15c\"}\n[2026-05-07 12:01:01] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"943aa5a3-32b8-4df0-9909-880604fb7b76\",\"trace_id\":\"68999115-111e-4ed4-891e-40f5f21af15c\"}\n[2026-05-07 12:01:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"ca85e588-6ce8-47fe-9c6d-0945e0af4432\",\"trace_id\":\"40993546-24df-4bd5-beab-80c8c4ff63e7\"}\n[2026-05-07 12:01:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"ca85e588-6ce8-47fe-9c6d-0945e0af4432\",\"trace_id\":\"40993546-24df-4bd5-beab-80c8c4ff63e7\"}\n[2026-05-07 12:01:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"e4f5d311-6031-4623-b6cc-3b40d9d09514\",\"trace_id\":\"80ff8918-fea3-4354-be93-1b8a26c76b43\"}\n[2026-05-07 12:01:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":62.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"e4f5d311-6031-4623-b6cc-3b40d9d09514\",\"trace_id\":\"80ff8918-fea3-4354-be93-1b8a26c76b43\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"68","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot;\n\nuse HubSpot\\Client\\Crm\\Deals\\ApiException as DealApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\ApiException as ContactApiException;\nuse HubSpot\\Client\\Crm\\Companies\\ApiException as CompanyApiException;\nuse HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectWithAssociations as ContactsWithAssociations;\nuse HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectWithAssociations as CompaniesWithAssociations;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectWithAssociations as DealWithAssociations;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectInput;\nuse HubSpot\\Client\\Crm\\Objects\\Model\\SimplePublicObjectWithAssociations as ObjectWithAssociations;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\Error;\nuse HubSpot\\Client\\Crm\\Pipelines\\Model\\PipelineStage;\nuse HubSpot\\Client\\Crm\\Properties\\Model\\Property;\nuse HubSpot\\Discovery\\Discovery;\nuse Jiminny\\Component\\Utility\\Service\\ProviderRateLimiter;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Exceptions\\RateLimitException;\nuse Jiminny\\Exceptions\\SocialAccountTokenInvalidException;\nuse Jiminny\\Jobs\\Crm\\NoteObject;\nuse Jiminny\\Models\\Crm\\Field;\nuse Jiminny\\Services\\Crm\\BaseClient;\nuse Jiminny\\Services\\Crm\\Hubspot\\DTO\\Response\\Owner;\nuse Jiminny\\Services\\SocialAccountService;\nuse SevenShores\\Hubspot\\Exceptions\\BadRequest;\nuse SevenShores\\Hubspot\\Exceptions\\HubspotException;\nuse SevenShores\\Hubspot\\Factory;\nuse SevenShores\\Hubspot\\Http\\Response;\nuse Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService;\nuse Throwable;\n\n/**\n * @phpstan-type CrmFieldOption array{id:string, label:string, value?:string}\n */\nclass Client extends BaseClient implements HubspotClientInterface\n{\n public const string MIN_API_VERSION = '2';\n\n public const string BASE_URL = 'https://api.hubapi.com';\n\n public const int ASSOCIATIONS_BATCH_SIZE_LIMIT = 1000;\n\n private HubspotPaginationService $paginationService;\n private HubspotTokenManager $tokenManager;\n private ProviderRateLimiter $rateLimiter;\n\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager,\n ProviderRateLimiter $rateLimiter,\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n $this->rateLimiter = $rateLimiter;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Single entry point for every HubSpot API call. Enforces the per-portal\n * rate limit configured in the rate_limits table (morphed to the current\n * Configuration) and reacts to a real 429 from HubSpot by translating it\n * into a RateLimitException carrying Retry-After.\n *\n * Wrap any outbound HubSpot call (SDK or raw HTTP) like:\n *\n * $this->executeRequest(fn () => $this->getNewInstance()->crm()->...);\n *\n * @template T\n * @param callable(): T $apiCall\n * @return T\n *\n * @throws RateLimitException\n */\n private function executeRequest(callable $apiCall)\n {\n if (! $this->rateLimiter->canMakeRequest($this->config)) {\n $retryAfter = $this->rateLimiter->requestAvailableIn($this->config);\n\n $this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n ]);\n\n throw new RateLimitException(\n 'Hubspot rate limit reached for configuration ' . $this->config->getId(),\n $retryAfter,\n );\n }\n\n $this->rateLimiter->incrementRequestCount($this->config);\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n $this->log->warning('[Hubspot] Received 429 from API', [\n 'team_id' => $this->config->team_id,\n 'config_id' => $this->config->getId(),\n 'retry_after' => $retryAfter,\n 'reason' => $e->getMessage(),\n ]);\n\n throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n }\n\n throw $e;\n }\n }\n\n private function isHubspotRateLimit(Throwable $e): bool\n {\n return method_exists($e, 'getCode') && (int) $e->getCode() === 429;\n }\n\n private function parseRetryAfter(Throwable $e): int\n {\n if (method_exists($e, 'getResponseHeaders')) {\n $headers = $e->getResponseHeaders() ?: [];\n $value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;\n if (is_array($value)) {\n $value = $value[0] ?? null;\n }\n if (is_numeric($value)) {\n return (int) $value;\n }\n }\n\n return 10;\n }\n\n public function getMinimumApiVersion(): string\n {\n return self::MIN_API_VERSION;\n }\n\n public function getInstance(): Factory\n {\n return new Factory([\n 'key' => $this->accessToken,\n 'oauth2' => true,\n 'base_url' => $this->baseUrl,\n ]);\n }\n\n public function getNewInstance(): Discovery\n {\n return \\HubSpot\\Factory::createWithAccessToken($this->accessToken);\n }\n\n /**\n * Secondly and daily limits for Hubspot API\n *\n * Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)\n * Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds\n * Daily: 250,000 | 500,000 | 1,000,000\n *\n * Official documentation states: The search endpoints are rate limited to five requests per second.\n * Since with 5 RPS were still hitting secondly rate limits we lowered it to 4\n */\n public function getPaginatedData(array $payload, string $type, int $offset = 0): array\n {\n $total = 0;\n $lastId = null;\n $rows = [];\n foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {\n $rows[] = $row;\n }\n\n return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];\n }\n\n /**\n * @throws HubspotException\n * @throws SocialAccountTokenInvalidException\n * @throws BadRequest\n */\n public function getPaginatedDataGenerator(\n array $payload,\n string $type,\n int $offset = 0,\n int &$total = 0,\n ?string &$lastRecordId = null\n ): \\Generator {\n return $this->paginationService->getPaginatedDataGenerator(\n $this,\n $payload,\n $type,\n $offset,\n $total,\n $lastRecordId\n );\n }\n\n /**\n * @throws DealApiException\n * @throws CrmException\n */\n public function getOpportunityById(string $crmId, array $fields): array\n {\n try {\n// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n 'companies,contacts'\n );\n } catch (DealApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $deal instanceof DealWithAssociations) {\n throw new CrmException('Deal not found');\n }\n\n return [\n 'id' => $deal->getId(),\n 'properties' => $deal->getProperties(),\n 'associations' => $deal->getAssociations(),\n ];\n }\n\n /**\n * Generic batch read method for HubSpot objects\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts')\n * @param array<string> $crmIds Array of HubSpot object IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with object data\n */\n private function batchReadObjects(string $objectType, array $crmIds, array $fields): array\n {\n if (empty($crmIds)) {\n return [];\n }\n\n $this->validateBatchSize($objectType, $crmIds);\n $this->ensureValidToken();\n\n try {\n $batchConfig = $this->createBatchConfiguration($objectType);\n $batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);\n $response = $batchConfig['api']->read($batchReadRequest);\n\n $this->validateApiResponse($response, $objectType);\n\n $results = $this->processApiResults($response);\n $this->logBatchResults($objectType, $crmIds, $results);\n\n return $results;\n } catch (\\Throwable $e) {\n $this->handleBatchError($e, $objectType, $crmIds);\n }\n }\n\n private function validateBatchSize(string $objectType, array $crmIds): void\n {\n if (count($crmIds) > 100) {\n throw new \\InvalidArgumentException(\"Batch size cannot exceed 100 {$objectType}\");\n }\n }\n\n private function createBatchConfiguration(string $objectType): array\n {\n $configurations = [\n 'deals' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Deals\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Deals\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->deals()->batchApi(),\n ],\n 'companies' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Companies\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Companies\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->companies()->batchApi(),\n ],\n 'contacts' => [\n 'batchReadRequest' => new \\HubSpot\\Client\\Crm\\Contacts\\Model\\BatchReadInputSimplePublicObjectId(),\n 'inputClass' => \\HubSpot\\Client\\Crm\\Contacts\\Model\\SimplePublicObjectId::class,\n 'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),\n ],\n ];\n\n if (! isset($configurations[$objectType])) {\n throw new \\InvalidArgumentException(\"Unsupported object type: {$objectType}\");\n }\n\n return $configurations[$objectType];\n }\n\n private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object\n {\n $batchReadRequest = $batchConfig['batchReadRequest'];\n $inputClass = $batchConfig['inputClass'];\n\n $inputs = array_map(function ($crmId) use ($inputClass) {\n $input = new $inputClass();\n $input->setId($crmId);\n\n return $input;\n }, $crmIds);\n\n $batchReadRequest->setInputs($inputs);\n $batchReadRequest->setProperties($fields);\n\n return $batchReadRequest;\n }\n\n private function validateApiResponse($response, string $objectType): void\n {\n if (! $response) {\n throw new CrmException(\"HubSpot API returned null response for {$objectType} batch read\");\n }\n }\n\n private function processApiResults($response): array\n {\n $results = [];\n $responseResults = $response->getResults();\n\n if ($responseResults) {\n foreach ($responseResults as $object) {\n if ($object && $object->getId()) {\n $results[$object->getId()] = [\n 'id' => $object->getId(),\n 'properties' => $object->getProperties() ?: [],\n ];\n }\n }\n }\n\n return $results;\n }\n\n private function logBatchResults(string $objectType, array $crmIds, array $results): void\n {\n $this->log->info(\"[HubSpot] Batch fetched {$objectType}\", [\n 'requested_count' => count($crmIds),\n 'returned_count' => count($results),\n 'crm_ids' => $crmIds,\n ]);\n }\n\n private function handleBatchError(\\Throwable $e, string $objectType, array $crmIds): void\n {\n $errorMessage = $e->getMessage() ?: 'Unknown error';\n $errorTrace = $e->getTraceAsString() ?: 'No trace available';\n\n $this->log->error(\"[HubSpot] Failed to batch fetch {$objectType}\", [\n 'crm_ids' => $crmIds,\n 'error' => $errorMessage,\n 'trace' => $errorTrace,\n ]);\n\n throw new CrmException(\"Failed to batch fetch {$objectType}: \" . $errorMessage);\n }\n\n /**\n * Batch read multiple opportunities by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot deal IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with opportunity data\n */\n public function getOpportunitiesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('deals', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple companies by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot company IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with company data\n */\n public function getCompaniesByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('companies', $crmIds, $fields);\n }\n\n /**\n * Batch read multiple contacts by their CRM IDs\n *\n * @param array<string> $crmIds Array of HubSpot contact IDs (max 100)\n * @param array<string> $fields Array of property names to fetch\n *\n * @return array<string, array> Array keyed by CRM ID with contact data\n */\n public function getContactsByIds(array $crmIds, array $fields): array\n {\n return $this->batchReadObjects('contacts', $crmIds, $fields);\n }\n\n /**\n * @throws CompanyApiException\n * @throws CrmException\n */\n public function getAccountById(string $crmId, array $fields): array\n {\n try {\n $company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(\n $crmId,\n implode(',', $fields),\n );\n } catch (CompanyApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch account', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $company instanceof CompaniesWithAssociations) {\n throw new CrmException('Account not found');\n }\n\n return [\n 'id' => $company->getId(),\n 'properties' => $company->getProperties(),\n ];\n }\n\n /**\n * @throws ContactApiException\n * @throws CrmException\n */\n public function getContactById(string $crmId, array $fields): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $crmId,\n implode(',', $fields)\n );\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'crm_id' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n if (! $contact instanceof ContactsWithAssociations) {\n throw new CrmException('Contact not found');\n }\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n }\n\n /**\n * This is email search request that Hubspot offers as GET (more generous quota)\n */\n public function getContactByEmail(string $email, array $fields = []): array\n {\n try {\n $contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(\n $email,\n implode(',', $fields),\n null,\n false,\n 'email'\n );\n\n return [\n 'id' => $contact->getId(),\n 'properties' => $contact->getProperties(),\n ];\n } catch (ContactApiException $e) {\n $this->log->info('[Hubspot] Failed to fetch contact', [\n 'email' => $email,\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n }\n\n /**\n * @throws CrmException\n */\n public function fetchProperty(string $objectType, string $propertyId): Property\n {\n $result = $this->getNewInstance()->crm()->properties()->coreApi()->getByName($objectType, $propertyId);\n\n if (! $result instanceof Property) {\n $this->log->error('[Hubspot] Failed to fetch property', [\n 'object_type' => $objectType,\n 'property_id' => $propertyId,\n 'reason' => $result->getMessage(),\n ]);\n\n throw new CrmException('Failed to fetch property');\n }\n\n return $result;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchPropertyOptions(string $objectType, string $propertyId): array\n {\n /** @var array<CrmFieldOption> */\n return $this->fetchProperty($objectType, $propertyId)->getOptions();\n }\n\n /**\n * @return array<array{id:string, label:string, deleted:bool}>\n */\n public function fetchCallDispositions(): array\n {\n /** @var Response $response */\n $response = $this->getInstance()->engagements()->getCallDispositions();\n\n /**\n * @var array<array{\n * id:string,\n * label:string,\n * deleted: bool\n * }>\n */\n return $response->toArray();\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityPipelineStages(): array\n {\n $stages = [];\n $apiResponse = $this->getNewInstance()->crm()->pipelines()->pipelinesApi()->getAll('deals');\n\n if ($apiResponse instanceof Error) {\n $this->log->error('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $apiResponse->getMessage(),\n ]);\n\n return [];\n }\n\n foreach ($apiResponse->getResults() as $pipeline) {\n $pipelineStages = array_map(\n static function (PipelineStage $stage) {\n return [\n 'id' => $stage->getId(),\n 'label' => $stage->getLabel(),\n ];\n },\n $pipeline->getStages()\n );\n\n $stages = array_merge($stages, $pipelineStages);\n }\n\n return $stages;\n }\n\n public function fetchOpportunityPipelines(): array\n {\n $pipelines = [];\n\n try {\n $apiResponse = $this->makeRequest('/crm/v3/pipelines/deals');\n } catch (\\Exception $e) {\n $this->log->info('[Hubspot] Failed to fetch opportunity pipelines', [\n 'reason' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n $response = $apiResponse->toArray();\n\n foreach ($response['results'] as $pipeline) {\n $pipelines[] = [\n 'id' => $pipeline['id'],\n 'label' => $pipeline['label'],\n ];\n }\n\n return $pipelines;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchMeetingOutcomeFieldOptions(Field $field): array\n {\n return $field->getCrmProviderId() === 'meetingOutcome'\n ? $this->fetchMeetingOutcomeTypes()\n : $this->fetchCallActivityTypes();\n }\n\n public function fetchMeetingOutcomeTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/meeting/hs_meeting_outcome'\n );\n }\n\n public function fetchCallActivityTypes(): array\n {\n return $this->extractMeetingTypeOptions(\n 'https://api.hubapi.com/crm/v3/properties/call/hs_activity_type'\n );\n }\n\n private function extractMeetingTypeOptions(string $endpoint): array\n {\n /** @var Response $response */\n $response = $this->getInstance()\n ->getClient()\n ->request('GET', $endpoint);\n\n /**\n * @var array<array{\n * value: string,\n * label: string,\n * displayOrder: int\n * }> $optionData\n */\n $optionData = $response->toArray()['options'] ?? [];\n\n $options = [];\n foreach ($optionData as $item) {\n $options[] = [\n 'id' => $item['value'],\n 'value' => $item['value'],\n 'label' => $item['label'],\n 'display_order' => $item['displayOrder'],\n ];\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchDispositionFieldOptions(): array\n {\n $options = [];\n\n $dispositions = $this->fetchCallDispositions();\n\n foreach ($dispositions as $disposition) {\n if ($disposition['deleted'] !== false) {\n continue;\n }\n\n $option['value'] = $disposition['id'];\n $option['id'] = $disposition['id'];\n $option['label'] = $disposition['label'];\n\n $options[] = $option;\n }\n\n return $options;\n }\n\n /**\n * @return array<CrmFieldOption>\n */\n public function fetchOpportunityFieldOptions(Field $field): array\n {\n if ($field->isStageField()) {\n return $this->fetchOpportunityPipelineStages();\n }\n\n if ($field->isPipelineField()) {\n return $this->fetchOpportunityPipelines();\n }\n\n return $this->fetchPropertyOptions('deals', $field->getCrmProviderId());\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function makeRequest(string $endpoint, $method = 'GET', $payload = [], ?string $queryString = null)\n {\n $endpoint = self::BASE_URL . $endpoint;\n\n if ($method === 'GET') {\n $response = $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n $response = $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\n\n $max = $response->getHeaderLine('X-HubSpot-RateLimit-Max'); // \"110\"\n $remaining = $response->getHeaderLine('X-HubSpot-RateLimit-Remaining'); // \"109\"\n $interval = $response->getHeaderLine('X-HubSpot-RateLimit-Interval-Milliseconds'); // \"10000\"\n $body = json_decode((string) $response->getBody(), true);\n\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$max ' . PHP_EOL . print_r($max, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$remaining ' . PHP_EOL . print_r($remaining, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$interval ' . PHP_EOL . print_r($interval, true));\n \\Illuminate\\Support\\Facades\\Log::channel('custom_channel')->info('$body ' . PHP_EOL . print_r($body, true));\n\n return $response;\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function createMeeting(array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings';\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n /**\n * @throws BadRequest\n * @throws HubspotException\n */\n public function updateMeeting(string $meetingId, array $payload): Response\n {\n $endpoint = '/crm/v3/objects/meetings/' . $meetingId;\n\n return $this->makeRequest($endpoint, 'PATCH', $payload);\n }\n\n /**\n * @throws \\Exception\n */\n public function createNote(\n string $body,\n string $ownerId,\n int $timestamp,\n string $objectId,\n NoteObject $noteObject\n ): ?string {\n try {\n $noteInput = new SimplePublicObjectInput([\n 'properties' => [\n 'hs_note_body' => $body,\n 'hubspot_owner_id' => $ownerId,\n 'hs_timestamp' => $timestamp,\n ],\n ]);\n\n // Create note\n $note = $this->getNewInstance()->crm()->objects()->basicApi()->create('note', $noteInput);\n\n $this->getNewInstance()->crm()->objects()->associationsApi()->create(\n 'note',\n $note->getId(),\n $this->getNoteObject($noteObject),\n $objectId,\n $this->getNoteAssociationType($noteObject),\n );\n\n return $note->getId();\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to create note', [\n 'objectId' => $objectId,\n 'noteObject' => $noteObject->getObjectType(),\n 'reason' => $e->getMessage(),\n ]);\n\n \\Sentry::captureException($e);\n }\n\n return null;\n }\n\n public function updateEngagement(string $objectId, array $engagement, array $metadata): void\n {\n $this->getInstance()->engagements()->update($objectId, $engagement, $metadata);\n }\n\n public function getEngagementData(string $engagementId): array\n {\n $engagement = $this->getInstance()->engagements()->get($engagementId);\n\n return $engagement->toArray();\n }\n\n public function createEngagement(array $engagement, array $associations, array $metadata): Response\n {\n return $this->getInstance()\n ->engagements()\n ->create($engagement, $associations, $metadata);\n }\n\n public function isUnauthorizedException(\\Exception $e): bool\n {\n // Check for specific HubSpot API exception types first\n if ($e instanceof BadRequest) {\n // BadRequest can contain 401 status codes\n return $e->getCode() === 401;\n }\n\n // Check for HTTP client exceptions with status codes\n if ($e instanceof \\GuzzleHttp\\Exception\\RequestException && $e->hasResponse()) {\n $response = $e->getResponse();\n if ($response !== null) {\n return $response->getStatusCode() === 401;\n }\n }\n\n // Check for Guzzle HTTP exceptions\n if ($e instanceof \\GuzzleHttp\\Exception\\ClientException) {\n return $e->getCode() === 401;\n }\n\n // Fallback to string matching as last resort, but be more specific\n $message = strtolower($e->getMessage());\n\n return str_contains($message, '401 unauthorized') ||\n str_contains($message, 'http 401') ||\n str_contains($message, 'status code 401') ||\n (preg_match('/\\b401\\b/', $message) && str_contains($message, 'unauthorized'));\n }\n\n /**\n * Validates and refreshes the access token if needed before API requests.\n * This ensures long-running processes don't fail due to token expiration.\n *\n * @throws SocialAccountTokenInvalidException\n */\n public function ensureValidToken(): void\n {\n if ($this->oauthAccount === null) {\n return;\n }\n\n $newToken = $this->tokenManager->ensureValidToken($this->oauthAccount);\n if ($newToken !== null) {\n $this->accessToken = $newToken;\n }\n }\n\n public function getConfig()\n {\n return $this->config;\n }\n\n // returns only active (archived=false)\n public function getOwners(): array\n {\n return $this->getNewInstance()->crm()->owners()->getAll();\n }\n\n /**\n * @param bool $archived\n *\n * @return array<Owner>|[]\n */\n public function getOwnersArchived(bool $archived = true): array\n {\n $endpoint = '/crm/v3/owners';\n $queryParams = [\n 'archived' => $archived ? 'true' : 'false',\n ];\n $queryString = http_build_query($queryParams);\n\n $owners = [];\n\n try {\n $response = $this->makeRequest(endpoint: $endpoint, queryString: $queryString);\n $responseData = $response?->toArray();\n\n foreach ($responseData['results'] as $result) {\n try {\n $owners[] = Owner::create($result);\n } catch (Throwable $e) {\n $this->log->error('[HubSpot] Failed to process owner data', [\n 'result' => $result,\n 'error' => $e->getMessage(),\n ]);\n\n continue;\n }\n }\n } catch (Throwable $e) {\n $this->log->error('HubSpot] Failed to fetch owners', [\n 'archived' => $archived,\n 'error' => $e->getMessage(),\n ]);\n\n return [];\n }\n\n return $owners;\n }\n\n public function getMeeting(string $engagementId): ObjectWithAssociations\n {\n return $this->getNewInstance()->crm()->objects()->basicApi()\n ->getById('meeting', $engagementId, null, 'contact,company,deal');\n }\n\n public function deleteEngagement(string $engagementId): void\n {\n $this->getInstance()->engagements()->delete((int) $engagementId);\n }\n\n public function getAssociationsData(array $ids, string $fromObject, string $toObject): array\n {\n $associationData = [];\n $idChunks = array_chunk($ids, self::ASSOCIATIONS_BATCH_SIZE_LIMIT);\n\n foreach ($idChunks as $idChunk) {\n try {\n $batchInput = new \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchInputPublicObjectId();\n $batchInput->setInputs(array_map(function ($id) {\n $publicObjectId = new \\HubSpot\\Client\\Crm\\Associations\\Model\\PublicObjectId();\n $publicObjectId->setId($id);\n\n return $publicObjectId;\n }, $idChunk));\n\n $associatedObjectsData = $this\n ->getNewInstance()\n ->crm()\n ->associations()\n ->batchApi()\n ->read($fromObject, $toObject, $batchInput);\n\n if ($associatedObjectsData instanceof \\HubSpot\\Client\\Crm\\Associations\\Model\\BatchResponsePublicAssociationMulti) {\n foreach ($associatedObjectsData->getResults() as $association) {\n $from = $association->getFrom()->getId();\n $toAssociations = $association->getTo();\n\n if (! empty($toAssociations)) {\n $associationData[$from] = array_map(function ($item) {\n return $item->getId();\n }, $toAssociations);\n }\n }\n }\n } catch (\\Exception $e) {\n $this->log->error('[Hubspot] Failed to fetch associations', [\n 'from_object' => $fromObject,\n 'to_object' => $toObject,\n 'reason' => $e->getMessage(),\n ]);\n }\n }\n\n return $associationData;\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteAssociationType(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'note_to_deal',\n NoteObject::Lead, NoteObject::Contact => 'note_to_contact', // or 'note_to_lead' if your portal supports it\n NoteObject::Account => 'note_to_company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n /**\n * @throws \\Exception\n */\n private function getNoteObject(NoteObject $noteObject): string\n {\n return match($noteObject) {\n NoteObject::Opportunity => 'deal',\n NoteObject::Lead, NoteObject::Contact => 'contact',\n NoteObject::Account => 'company',\n NoteObject::Call, NoteObject::Event => throw new \\Exception('Not supported'),\n };\n }\n\n public function addAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/create\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n\n public function removeAssociations(string $objectType, string $associationType, array $payload): Response\n {\n $endpoint = \"/crm/v4/associations/$objectType/$associationType/batch/archive\";\n\n return $this->makeRequest($endpoint, 'POST', $payload);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3274081582853487790
|
6728781737419775085
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
master, menu
Start Listen Project: faVsco.js, menu
master, menu
Start Listening for PHP Debug Connections
AskJiminnyReportActivityServiceTest
Run 'AskJiminnyReportActivityServiceTest'
Debug 'AskJiminnyReportActivityServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"ba54f876-ed51-46c4-a424-40061240febe","trace_id":"24502183-c787-4bf5-a0f4-8484084c4890"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:15] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"9bb14dd3-f09c-4c32-b735-8e025612a434","trace_id":"d7467977-684c-4e49-a13f-29131bdeef1d"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"3b542290-d085-46f5-89f3-79d3c32429d9","trace_id":"042a3c0c-bd79-421e-bb57-e7c54deff710"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring start {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:17] local.NOTICE: Monitoring end {"correlation_id":"12ab3a43-244a-440b-8222-34d39fa7a1dd","trace_id":"1038042e-bec6-44e1-96a5-7981edea9c3b"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:19] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fa0de4a7-00f9-4e46-bc95-fd3bdcdd8b76","trace_id":"ac7407b5-6e70-4bbe-b609-56212966ac0c"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"a7bdf522-3947-4e45-b2f1-29d0452e5c7b","trace_id":"d1d2f5f1-838b-4cd9-b426-6df86f039c7e"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Running conference:monitor:count command for activities in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: [conference:monitor:count] No activities found in (2026-05-07 11:58:00, 2026-05-07 12:00:00] {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:count","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"57548e63-f690-4b40-8fb9-c5ef931ba709","trace_id":"4c5e44a8-46fa-4406-a8fb-bc5b1b2c6c45"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:purge-stale","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"1ee8a6ce-d9b5-431e-a2c7-2e1fbf547e97","trace_id":"7662e098-2dcb-4dc5-b211-4a2c49407f21"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"10879f07-6573-412f-bdd6-561ce314a532","trace_id":"4399b7be-872f-4fef-aaa0-83288d53f661"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Running pre-meeting notification command {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:29] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43ec96a4-b11b-4535-97c9-c8fe165fec03","trace_id":"51799249-ffcb-49d5-af3e-20e336cb7579"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Running conference:monitor:start command for activities in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: [conference:monitor:start] No activities found in (2026-05-07 11:50:00, 2026-05-07 11:55:00] {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:35] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"7171c814-99c9-445d-b3b1-17e0bf41d357","trace_id":"78628f1b-baa0-4375-95cc-071512c1b0ea"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"11:55","to":"12:00"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"01:50","to":"01:55"} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:38] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"fdf2c4e7-46fe-42b2-a305-a3e5dd3d28bf","trace_id":"19fe5840-6afe-4d92-abcd-8301e4181d63"}
[2026-05-07 12:00:39] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:39] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:40] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] 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":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:41] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"056110f4-1889-42f3-b498-9fe41f3478b7","trace_id":"e94e1ff7-8c4c-4081-aa0f-4b8fc1e256a8"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"8242f028-d290-43e7-80fd-3b4ef698dfd8","trace_id":"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryPeakBeforeCommandInMb":99.727} {"correlation_id":"cc6c3431-7f7c-44e2-af0c-f0d95b84155f","trace_id":"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027"}
[2026-05-07 12:00:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"cc6c3431-7f7c-44e2-af0c-f0d95b84155f","trace_id":"d7ce5c7b-e9ad-4cd5-8c94-401a68b5c027"}
[2026-05-07 12:00:47] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":62.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"8242f028-d290-43e7-80fd-3b4ef698dfd8","trace_id":"a16e1f5a-3e9c-4bb7-991a-e20725bfc3d0"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-07T12:02:47.036006Z"} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"1d86b28e-338e-4a33-a600-6b5673291da5","trace_id":"f9f10d27-0739-4645-8e09-517060c40a4c"}
[2026-05-07 12:00:47] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"[URL_WITH_CREDENTIALS] CrmFieldOption array{id:string, label:string, value?:string}
*/
class Client extends BaseClient implements HubspotClientInterface
{
public const string MIN_API_VERSION = '2';
public const string BASE_URL = '[URL_WITH_CREDENTIALS] T
* @param callable(): T $apiCall
* @return T
*
* @throws RateLimitException
*/
private function executeRequest(callable $apiCall)
{
if (! $this->rateLimiter->canMakeRequest($this->config)) {
$retryAfter = $this->rateLimiter->requestAvailableIn($this->config);
$this->log->warning('[Hubspot] Rate limit exceeded, deferring request', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
]);
throw new RateLimitException(
'Hubspot rate limit reached for configuration ' . $this->config->getId(),
$retryAfter,
);
}
$this->rateLimiter->incrementRequestCount($this->config);
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function isHubspotRateLimit(Throwable $e): bool
{
return method_exists($e, 'getCode') && (int) $e->getCode() === 429;
}
private function parseRetryAfter(Throwable $e): int
{
if (method_exists($e, 'getResponseHeaders')) {
$headers = $e->getResponseHeaders() ?: [];
$value = $headers['Retry-After'] ?? $headers['retry-after'] ?? null;
if (is_array($value)) {
$value = $value[0] ?? null;
}
if (is_numeric($value)) {
return (int) $value;
}
}
return 10;
}
public function getMinimumApiVersion(): string
{
return self::MIN_API_VERSION;
}
public function getInstance(): Factory
{
return new Factory([
'key' => $this->accessToken,
'oauth2' => true,
'base_url' => $this->baseUrl,
]);
}
public function getNewInstance(): Discovery
{
return \HubSpot\Factory::createWithAccessToken($this->accessToken);
}
/**
* Secondly and daily limits for Hubspot API
*
* Product Tier: Free & Starter | Professional & Enterprise | API add-on (any tier)
* Burst: 100/10 seconds | 150/10 seconds | 200/10 seconds
* Daily: 250,000 | 500,000 | 1,000,000
*
* Official documentation states: The search endpoints are rate limited to five requests per second.
* Since with 5 RPS were still hitting secondly rate limits we lowered it to 4
*/
public function getPaginatedData(array $payload, string $type, int $offset = 0): array
{
$total = 0;
$lastId = null;
$rows = [];
foreach ($this->getPaginatedDataGenerator($payload, $type, $offset, $total, $lastId) as $row) {
$rows[] = $row;
}
return ['results' => $rows, 'total' => $total, 'last_record' => $lastId];
}
/**
* @throws HubspotException
* @throws SocialAccountTokenInvalidException
* @throws BadRequest
*/
public function getPaginatedDataGenerator(
array $payload,
string $type,
int $offset = 0,
int &$total = 0,
?string &$lastRecordId = null
): \Generator {
return $this->paginationService->getPaginatedDataGenerator(
$this,
$payload,
$type,
$offset,
$total,
$lastRecordId
);
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
// $deal = $this->executeRequest(fn () => $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$deal = $this->getNewInstance()->crm()->deals()->basicApi()->getById(
$crmId,
implode(',', $fields),
'companies,contacts'
);
} catch (DealApiException $e) {
$this->log->info('[Hubspot] Failed to fetch opportunity', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $deal instanceof DealWithAssociations) {
throw new CrmException('Deal not found');
}
return [
'id' => $deal->getId(),
'properties' => $deal->getProperties(),
'associations' => $deal->getAssociations(),
];
}
/**
* Generic batch read method for HubSpot objects
*
* @param string $objectType The object type ('deals', 'companies', 'contacts')
* @param array<string> $crmIds Array of HubSpot object IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with object data
*/
private function batchReadObjects(string $objectType, array $crmIds, array $fields): array
{
if (empty($crmIds)) {
return [];
}
$this->validateBatchSize($objectType, $crmIds);
$this->ensureValidToken();
try {
$batchConfig = $this->createBatchConfiguration($objectType);
$batchReadRequest = $this->prepareBatchRequest($batchConfig, $crmIds, $fields);
$response = $batchConfig['api']->read($batchReadRequest);
$this->validateApiResponse($response, $objectType);
$results = $this->processApiResults($response);
$this->logBatchResults($objectType, $crmIds, $results);
return $results;
} catch (\Throwable $e) {
$this->handleBatchError($e, $objectType, $crmIds);
}
}
private function validateBatchSize(string $objectType, array $crmIds): void
{
if (count($crmIds) > 100) {
throw new \InvalidArgumentException("Batch size cannot exceed 100 {$objectType}");
}
}
private function createBatchConfiguration(string $objectType): array
{
$configurations = [
'deals' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Deals\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Deals\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->deals()->batchApi(),
],
'companies' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Companies\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Companies\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->companies()->batchApi(),
],
'contacts' => [
'batchReadRequest' => new \HubSpot\Client\Crm\Contacts\Model\BatchReadInputSimplePublicObjectId(),
'inputClass' => \HubSpot\Client\Crm\Contacts\Model\SimplePublicObjectId::class,
'api' => $this->getNewInstance()->crm()->contacts()->batchApi(),
],
];
if (! isset($configurations[$objectType])) {
throw new \InvalidArgumentException("Unsupported object type: {$objectType}");
}
return $configurations[$objectType];
}
private function prepareBatchRequest(array $batchConfig, array $crmIds, array $fields): object
{
$batchReadRequest = $batchConfig['batchReadRequest'];
$inputClass = $batchConfig['inputClass'];
$inputs = array_map(function ($crmId) use ($inputClass) {
$input = new $inputClass();
$input->setId($crmId);
return $input;
}, $crmIds);
$batchReadRequest->setInputs($inputs);
$batchReadRequest->setProperties($fields);
return $batchReadRequest;
}
private function validateApiResponse($response, string $objectType): void
{
if (! $response) {
throw new CrmException("HubSpot API returned null response for {$objectType} batch read");
}
}
private function processApiResults($response): array
{
$results = [];
$responseResults = $response->getResults();
if ($responseResults) {
foreach ($responseResults as $object) {
if ($object && $object->getId()) {
$results[$object->getId()] = [
'id' => $object->getId(),
'properties' => $object->getProperties() ?: [],
];
}
}
}
return $results;
}
private function logBatchResults(string $objectType, array $crmIds, array $results): void
{
$this->log->info("[HubSpot] Batch fetched {$objectType}", [
'requested_count' => count($crmIds),
'returned_count' => count($results),
'crm_ids' => $crmIds,
]);
}
private function handleBatchError(\Throwable $e, string $objectType, array $crmIds): void
{
$errorMessage = $e->getMessage() ?: 'Unknown error';
$errorTrace = $e->getTraceAsString() ?: 'No trace available';
$this->log->error("[HubSpot] Failed to batch fetch {$objectType}", [
'crm_ids' => $crmIds,
'error' => $errorMessage,
'trace' => $errorTrace,
]);
throw new CrmException("Failed to batch fetch {$objectType}: " . $errorMessage);
}
/**
* Batch read multiple opportunities by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot deal IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with opportunity data
*/
public function getOpportunitiesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('deals', $crmIds, $fields);
}
/**
* Batch read multiple companies by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot company IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with company data
*/
public function getCompaniesByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('companies', $crmIds, $fields);
}
/**
* Batch read multiple contacts by their CRM IDs
*
* @param array<string> $crmIds Array of HubSpot contact IDs (max 100)
* @param array<string> $fields Array of property names to fetch
*
* @return array<string, array> Array keyed by CRM ID with contact data
*/
public function getContactsByIds(array $crmIds, array $fields): array
{
return $this->batchReadObjects('contacts', $crmIds, $fields);
}
/**
* @throws CompanyApiException
* @throws CrmException
*/
public function getAccountById(string $crmId, array $fields): array
{
try {
$company = $this->getNewInstance()->crm()->companies()->basicApi()->getById(
$crmId,
implode(',', $fields),
);
} catch (CompanyApiException $e) {
$this->log->info('[Hubspot] Failed to fetch account', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $company instanceof CompaniesWithAssociations) {
throw new CrmException('Account not found');
}
return [
'id' => $company->getId(),
'properties' => $company->getProperties(),
];
}
/**
* @throws ContactApiException
* @throws CrmException
*/
public function getContactById(string $crmId, array $fields): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$crmId,
implode(',', $fields)
);
} catch (ContactApiException $e) {
$this->log->info('[Hubspot] Failed to fetch contact', [
'crm_id' => $crmId,
'reason' => $e->getMessage(),
]);
throw $e;
}
if (! $contact instanceof ContactsWithAssociations) {
throw new CrmException('Contact not found');
}
return [
'id' => $contact->getId(),
'properties' => $contact->getProperties(),
];
}
/**
* This is email search request that Hubspot offers as GET (more generous quota)
*/
public function getContactByEmail(string $email, array $fields = []): array
{
try {
$contact = $this->getNewInstance()->crm()->contacts()->basicApi()->getById(
$email,
implode(',', $fields),
null,
false,
'email'
...
|
NULL
|
NULL
|
NULL
|
NULL
|